5 peywirên hevpeyivîna JavaScript-a tîpîk: analîz û çareserî

5 peywirên hevpeyivîna JavaScript-a tîpîk: analîz û çareserî

Ji wergêr: ji we re gotarek weşand Maria Antonietta Perna, ku li ser karên hevpar ên JavaScriptê diaxive, pir caran di dema hevpeyivînan de ji serlêderên pêşdebir re tê pêşkêş kirin. Gotar dê, berî her tiştî, ji bernamenûsên nûjen re kêrhatî be.

Hevpeyvînên li pargîdaniyên teknolojiyê ji demek dirêj ve nîqaşa bajêr e. Pêdivî ye ku ev ne ecêb be - bi serfirazî derbaskirina hevpeyivînek fersendê dide we ku hûn karek baş bistînin. Lê ev ne ew çend hêsan e, ji ber ku pirsgirêkên tevlihev pir caran hewce ne ku bêne çareser kirin.

Digel vê yekê, pir caran, piraniya van karan ne bi xebata ku serlêder dê pêk bîne ve girêdayî ne, lê ew hîn jî hewce ne ku bêne çareser kirin. Carinan pêdivî ye ku hûn wiya li ser panelê bikin, bêyî ku bi Google an çavkaniyek din re kontrol bikin. Erê, rewş gav bi gav diguhere, û hin pargîdan dev ji hevpeyivînên bi vî rengî berdidin, lê gelek kardêr hîn jî bi vê kevneşopiyê ve girêdayî ne. Ev gotar ji analîzkirina peywirên JavaScript-ê yên tîpîk ên ku bi gelemperî wekî peywirên ji bo lêgerînerên kar têne bikar anîn ve girêdayî ye.

Em bînin bîra xwe: ji bo hemî xwendevanên "Habr" - dema ku hûn beşdarî qursek Skillbox-ê bi karanîna koda danasînê ya "Habr" têne qeyd kirin 10 rubleyan dakêşin.

Skillbox pêşniyar dike: Kursa pratîk "Pêşvebirê Mobîl PRO".

Ya sereke ev e ku meriv ji bo hevpeyivîna xwe bi tevahî amade bike.

Erê, berî ku em dest pê bikin li peywiran mêze bikin, em li hin serişteyên amadekirina hevpeyivînê yên gelemperî binêrin.

Ya sereke ev e ku meriv pêşî amade bike. Biceribînin ka hûn çiqasî algorîtma û strukturên daneyê bi bîr tînin, û zanîna xwe li deverên ku hûn zêde pê nizanin baştir bikin. Gelek platformên serhêl hene ku dikarin ji we re bibin alîkar ku hûn ji bo hevpeyivînan amade bibin. Em şîret dikin geeksforgeeks, Pramp, Interviewing.io и CodeSignal.

Hêja ye ku meriv biryarê bi dengekî bilind bibêje. Tête pêşniyar kirin ku hûn tiştên ku hûn dikin ji serlêderan re bibêjin, û ne tenê li ser panelê binivîsin (an jî kodê li komputerê binivîsin, di heman demê de bêdeng). Bi vî rengî, heke hûn di kodê de xeletiyek bikin, lê çareserî bi gelemperî rast e, hûn dikarin şansên serkeftinê zêde bikin.

Pêdivî ye ku hûn pirsgirêkê fêm bikin berî ku hûn dest bi çareserkirina wê bikin. Di hin rewşan de, dibe ku hûn peywirek bi serpêhatî fam bikin û dûv re bikevin rêyek xelet. Dibe ku hêja ye ku çend pirsên zelal ji hevpeyvîner re bipirsin.

Hûn hewce ne ku hûn kodê bi destan binivîsin, ne li ser PC-yê. Wusa diqewime ku di dema hevpeyivînan de nîşangir û tabloyek spî ji serlêder re tê dayîn, ku li wir îşaret û formatkirina otomatîkî tune. Dema ku li çareseriyê digerin, hêja ye ku koda xwe li ser kaxezek an rasterast li ser panelê binivîsin. Ger hûn her tiştî di serê xwe de bihêlin, dibe ku hûn tiştek girîng ji bîr bikin.

Karên şablonê di JavaScript de

Hin ji van karan belkî jixwe ji we re nas in. We an hevpeyivînên ku we neçar ma ku tiştek wusa çareser bike, an jî dema fêrbûna JavaScript-ê li ser wan pratîk kir. Welê, naha ew dem e ku wan dîsa çareser bikin, û bi ravekek berfireh a pêvajoyê.

Palindrome

Palindrom peyv, hevok an rêzek tîpan e ku hem di arasteya adetî û hem jî berevajî de bi heman rengî tê xwendin. Mînakî, "Anna" palindromek e, lê "mase" û "Yûhenna" ne.

Stasyon

Têlek dan; pêdivî ye ku hûn fonksiyonek binivîsin ku destûrê dide te ku hûn rast vegerînin ger rêzik palindromek be, û xelet be heke ne. Di vê rewşê de, hûn hewce ne ku cîh û nîşanên xalbendiyê bigirin.

palindrome ('racecar') === rast
palindrome('table') === xelet

Werin em peywirê analîz bikin

Fikra sereke li vir berevajîkirina rêzê ye. Ger rêzika "berepaş" bi tevahî wekî ya orîjînal be, wê hingê me palindromek wergirtiye û divê fonksiyon rast vegere. Heke ne, derewîn.

biryar

Li vir koda ku palindromê çareser dike ye.

const palindrome = str => {
  // turn the string to lowercase
  str = str.toLowerCase()
  // reverse input string and return the result of the
  // comparisong
  return str === str.split('').reverse().join('')
}

Pêngava yekem ev e ku meriv tîpên di rêzika têketinê de bi tîpên piçûk veguherîne. Ev garantiyek e ku bername dê karakteran bixwe bide ber hev, ne rewş an tiştek din.

Pêngava duyemîn berevajîkirina rêzê ye. Ev ne zehmet e ku were kirin: hûn hewce ne ku wê bi rêbaza .split() (pirtûkxaneya String) veguherînin array. Dûv re em array bi karanîna .reverse() (pirtûkxaneya Array) berevajî dikin. Pêngava paşîn ev e ku meriv rêzika berevajî bi karanîna .join() (pirtûkxaneya Array) veguherîne rêzek.

Naha ya ku hûn hewce ne bikin ev e ku rêzika "berepaş" bi rêzika orîjînal re bidin ber hev, encamê rast an xelet vegerînin.

FizzBuzz

Yek ji karên herî populer ên di hevpeyivînan de.

Stasyon

Pêdivî ye ku hûn fonksiyonek binivîsin ku hejmarên ji 1-ê heya n-yê li konsolê çap dike, ku n hejmareke tevahî ye ku fonksiyon wekî parametre digire, bi şert û mercên jêrîn:

  • li şûna pirjimarên 3-ê fizz derxe;
  • li şûna hejmarên ku carcarên 5-ê ne, deng derdixe;
  • fizzbuzz li şûna hejmarên ku ji 3 û 5-an pirjimar in derdixe.

Nimûne:

Fizzbuzz(5)

Di encama

// 1
// 2
// fizz
// 4
//pispisîn

Werin em peywirê analîz bikin

Ya sereke li vir rêyek e ku meriv bi karanîna JavaScript-ê pirjimaran bibîne. Ew dikare bi karanîna operatorê modulus an mayî - % were sepandin, ku dihêle hûn dema du hejmaran dabeş bikin mayî nîşan bidin. Heke mayî 0 be, ev tê wê wateyê ku hejmara yekem pirjimara ya duyemîn e.

12% 5 // 2 -> 12 ne pirjimara 5 ye
12% 3 // 0 -> 12 pirjimar 3 ye

Ji ber vê yekê, heke hûn 12-ê li 5-ê parve bikin, hûn 2-yê bi mayî 2-yê digirin. Heke hûn 12-ê li 3-yê dabeş bikin, hûn 4-ê bi mayî 0-yê digirin. , 12 pirjimara 5 ye.

biryar

Çareseriya çêtirîn dê koda jêrîn be:

const fizzBuzz = num => {
  for(let i = 1; i <= num; i++) {
    // check if the number is a multiple of 3 and 5
    if(i % 3 === 0 && i % 5 === 0) {
      console.log('fizzbuzz')
    } // check if the number is a multiple of 3
      else if(i % 3 === 0) {
      console.log('fizz')
    } // check if the number is a multiple of 5
      else if(i % 5 === 0) {
      console.log('buzz')
    } else {
      console.log(i)
    }
  }
}

Fonksiyon bi karanîna daxuyaniyên şertî ve kontrolên pêwîst pêk tîne û encama ku ji hêla bikarhêner ve tê xwestin çêdike. Di pirsgirêkê de, hêja ye ku meriv bala xwe bide rêza bêjeyên if...else: bi şertek ducarî (&&) dest pê bikin û bi doza ku çend hejmar nehatin dîtin bi dawî bibin. Wekî encamek, em hemî vebijarkan vedigirin.

Anagram

Ev navê peyvekê ye ku hemû tîpên peyveke din bi heman hejmarê lê bi rêzeke cuda tê de ye.

Stasyon

Pêdivî ye ku em fonksiyonek binivîsin ku kontrol dike ka du rêz anagram in, û rewş ne girîng e. Tenê tîp têne jimartin; valahî an xalbendî li ber çavan nayê girtin.

anagram('veger', 'Heval') —> rast
anagram('silav', 'bi xatirê te') —> derewîn

Werin em peywirê analîz bikin

Tişta girîng ku meriv li vir bifikire ev e ku hûn hewce ne ku her tîpek di du xetên têketinê de û hejmara wan di her rêzê de kontrol bikin.

peydaker —> f: 1 heval —> f: 1
ez: 1 r: 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1

Ji bo hilanîna daneyên anagramê, divê hûn avahiyek wekî biwêjek JavaScript hilbijêrin. Ya sereke di vê rewşê de karaktera nameyê ye, nirx di rêza heyî de hejmara dubareyên wê ye.

Şertên din hene:

  • Pêdivî ye ku hûn pê ewle bin ku dema berhevdanê de rewşa tîpan li ber çavan nayê girtin. Em bi tenê her du rêzan vediguherînin tîpên jêrîn an jorîn.
  • Em hemî ne-karekteran ji berhevdanê derdixin. Baştirîn kar bi îfadeyên rêkûpêk.

biryar

// helper function that builds the
// object to store the data
const buildCharObject = str => {
  const charObj = {}
  for(let char of str.replace(/[^w]/g).toLowerCase()) {
    // if the object has already a key value pair
    // equal to the value being looped over,
    // increase the value by 1, otherwise add
    // the letter being looped over as key and 1 as its value
    charObj[char] = charObj[char] + 1 || 1
  }
  return charObj
}
 
// main function
const anagram = (strA, strB) => {
  // build the object that holds strA data
  const aCharObject = buildCharObject(strA)
  // build the object that holds strB data
  const bCharObject = buildCharObject(strB)
 
  // compare number of keys in the two objects
  // (anagrams must have the same number of letters)
  if(Object.keys(aCharObject).length !== Object.keys(bCharObject).length) {
    return false
  }
  // if both objects have the same number of keys
  // we can be sure that at least both strings
  // have the same number of characters
  // now we can compare the two objects to see if both
  // have the same letters in the same amount
  for(let char in aCharObject) {
    if(aCharObject[char] !== bCharObject[char]) {
      return false
    }
  }
  // if both the above checks succeed,
  // you have an anagram: return true
  return true
}

Bala xwe bidin ser karanînê Object.keys() di pişka jorîn de. Ev rêbaz komek navan an bişkojan bi heman rêza ku di objektê de xuya dikin vedigerîne. Di vê rewşê de array dê wiha be:

['f', 'i', 'n', 'd', 'e', ​​'r']

Bi vî rengî em bêyî ku em dorpêkek mezin bikin taybetmendiyên tiştê werdigirin. Di pirsgirêkekê de, hûn dikarin vê rêbazê bi taybetmendiya .length bikar bînin da ku hûn kontrol bikin ka her du rêzan heman hejmara tîpan hene - ev taybetmendiyek girîng a anagraman e.

Li dengdêran bigerin

Karekî pir hêsan ku pir caran di hevpeyivînan de derdikeve pêş.

Stasyon

Pêdivî ye ku hûn fonksiyonek binivîsin ku rêzek wekî arguman digire û hejmara dengdêrên ku di rêzikê de hene vedigerîne.
Dengdêr "a", "e", "i", "o", "u" ne.

Nimûne:

findVowels('silav') // —> 2
findVowels('çima') // —> 0

biryar

Li vir vebijarka herî hêsan e:

const findVowels = str => {
  let count = 0
  const vowels = ['a', 'e', 'i', 'o', 'u']
  for(let char of str.toLowerCase()) {
    if(vowels.includes(char)) {
      count++
    }
  }
  return count
}

Girîng e ku meriv bala xwe bide ser karanîna rêbaza .includes(). Ew hem ji bo rêz û hem jî ji bo rêzan heye. Pêdivî ye ku ew were bikar anîn da ku diyar bike ka array nirxek diyar heye an na. Heke rêzik nirxa diyarkirî hebe ev rêbaz rast vedigerîne, heke ne wusa be jî xelet vedigere.

Ji pirsgirêkê re çareseriyek kurttir heye:

const findVowels = str => {
  const matched = str.match(/[aeiou]/gi)
  return matched ? matches.length : 0
}

Ev rêbaza .match() bikar tîne, ku dihêle hûn lêgerînek bikêrhatî bicîh bikin. Ger birêkûpêkek rêkûpêk wekî argumanek rêbazê di hundurê rêzika diyarkirî de were dîtin, wê hingê nirxa vegerê komek tîpên lihevhatî ye. Welê, heke hevber tunebin, wê hingê .match() null vedigere.

fibonacci

Karekî klasîk ku di hevpeyivînan de di astên cihêreng de tê dîtin. Hêjayî bibîrxistinê ye ku rêza Fibonacci rêzek jimare ye ku her yek li dû hev berhevoka her duyên berê ye. Ji ber vê yekê, deh hejmarên pêşîn wiha xuya dikin: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Stasyon

Pêdivî ye ku hûn fonksiyonek binivîsin ku tomara n-ê di rêzek diyarkirî de vedigerîne, digel ku n jimareya ku wekî arguman ji fonksiyonê re derbas dibe ye.

fibonacci(3) // —> 2

Ev peywir bi çend caran ku di argumanê de hatî destnîşan kirin di nav lûpekê de dimeşe, nirxê li cîhê guncan vedigerîne. Ev awayê danasîna pirsgirêkê bi karanîna loopan hewce dike. Heke hûn li şûna vegerandinê bikar bînin, dibe ku ew ji hevpeyivînkar xweş bike û çend xalên zêde bide we.

biryar

const fibonacci = num => {
  // store the Fibonacci sequence you're going
  // to generate inside an array and
  // initialize the array with the first two
  // numbers of the sequence
  const result = [0, 1]
 
  for(let i = 2; i <= num; i++) {
    // push the sum of the two numbers
    // preceding the position of i in the result array
    // at the end of the result array
    const prevNum1 = result[i - 1]
    const prevNum2 = result[i - 2]
    result.push(prevNum1 + prevNum2)
  }
  // return the last value in the result array
  return result[num]
}

Di rêza encaman de, du hejmarên pêşîn di rêzê de têne girtin ji ber ku her navnîşek di rêzê de berhevoka du hejmarên berê ye. Di destpêkê de du hejmar nînin ku meriv bikaribe jimara din bigire, ji ber vê yekê lûp nikare wan bixweber çêbike. Lê, wekî ku em dizanin, her du hejmarên pêşîn her gav 0 û 1 in. Ji ber vê yekê, hûn dikarin rêzika encaman bi destan dest pê bikin.

Ji bo vegerandinê, her tişt di heman demê de sadetir û tevlihevtir e:

const fibonacci = num => {
  // if num is either 0 or 1 return num
  if(num < 2) {
    return num
  }
  // recursion here
  return fibonacci(num - 1) + fibonacci(num - 2)
}

Em her tim gazî fibonacci () dikin, hejmarên piçûktir û piçûktir wekî argumanan derbas dikin. Dema ku argumana derbasbûyî 0 an 1 be em disekinin.

encamê

Bi îhtimaleke mezin, we berê rastî yek ji van peywiran hat ger ku hûn ji bo karek pêşdebirkerek pêşdebir an JavaScript-ê hatine hevpeyivîn kirin (nemaze heke ew di asta ciwan de be). Lê heke we li wan nehatibe, dibe ku ew di pêşerojê de bikêr bin - bi kêmanî ji bo pêşkeftina gelemperî.

Skillbox pêşniyar dike:

Source: www.habr.com

Add a comment