5 asa fanadinadinana JavaScript mahazatra: fanadihadiana sy vahaolana

5 asa fanadinadinana JavaScript mahazatra: fanadihadiana sy vahaolana

Avy amin'ny mpandika teny: namoaka lahatsoratra ho anao Maria Antonietta Perna, izay miresaka momba ny asa JavaScript mahazatra, matetika atolotra ho an'ireo mpangataka mpamorona mandritra ny dinidinika. Ny lahatsoratra dia hahasoa, voalohany indrindra, ho an'ny programa vaovao.

Resadresaka hatry ny ela ny resadresaka nifanaovana tamin’ireo orinasa teknolojia. Tsy tokony hahagaga izany - ny fanadinadinana am-pahombiazana dia manome anao fahafahana hahazo asa tsara. Saingy tsy dia tsotra loatra izany, satria matetika ny olana sarotra dia mila voavaha.

Ankoatr'izay, matetika, ny ankamaroan'ireo asa ireo dia tsy mifandray amin'ny asa izay hataon'ny mpangataka, fa mbola mila vahana. Indraindray ianao dia tsy maintsy manao izany eo amin'ny solaitrabe, tsy mijery amin'ny Google na loharano hafa. Eny, miova tsikelikely ny toe-draharaha, ary misy orinasa sasany miala amin'ny dinidinika toy izany, saingy maro amin'ireo mpampiasa no mbola manaraka io fomban-drazana io. Ity lahatsoratra ity dia natokana ho an'ny famakafakana ireo asa JavaScript mahazatra izay matetika ampiasaina ho asa ho an'ireo mitady asa.

Mampahatsiahy izahay: ho an'ny mpamaky rehetra ny "Habr" - fihenam-bidy 10 roubles rehefa misoratra anarana amin'ny taranja Skillbox rehetra mampiasa ny code promotional "Habr".

Skillbox dia manoro hevitra: Mazava ho azy "Mobile Developer PRO".

Ny tena zava-dehibe dia ny manomana tsara amin'ny dinidinikao.

Eny, alohan'ny hanombohantsika mijery ireo asa, andeha hojerentsika ny toro-hevitra momba ny fanomanana dinidinika ankapobeny.

Ny tena zava-dehibe dia ny manomana mialoha. Andramo tsara ny fitadidianao ny algorithm sy ny firafitry ny angona, ary hatsarao ny fahalalanao amin'ny faritra tsy dia mahazatra anao. Betsaka ny sehatra an-tserasera afaka manampy anao hiomana amin'ny dinidinika. Manoro hevitra izahay geeksforgeeks, Pramp, Interviewing.io и CodeSignal.

Ilaina ny mianatra miteny mafy ny fanapahan-kevitra. Tsara ny milaza amin'ny mpangataka ny zavatra ataonao, fa tsy manoratra eny amin'ny solaitrabe fotsiny (na soraty ny kaody ao anaty solosaina, mangina ihany koa). Amin'izany fomba izany, raha manao fahadisoana amin'ny code ianao, saingy amin'ny ankapobeny dia marina ny vahaolana, dia afaka mampitombo ny fahombiazanao ianao.

Mila mahatakatra ny olana ianao alohan'ny hanombohanao hamaha izany. Amin'ny toe-javatra sasany, dia mety ho takatrao ny asa iray ary avy eo hidina amin'ny lalana diso. Mety ilaina ny mametraka fanontaniana manazava vitsivitsy amin'ny mpanadinadina.

Mila mizatra manoratra kaody amin'ny tanana ianao fa tsy amin'ny PC. Mitranga fa mandritra ny dinidinika dia omena marika sy solaitrabe ny mpangataka, izay tsy misy soso-kevitra na fandrafetana mandeha ho azy. Rehefa mitady vahaolana dia mendrika ny manoratra ny kaodinao amin'ny taratasy iray na mivantana eo amin'ny solaitrabe. Raha mitazona ny zava-drehetra ao an-dohanao ianao dia mety hanadino zavatra manan-danja.

Asa modely amin'ny JavaScript

Ny sasany amin'ireo asa ireo angamba dia efa mahazatra anao. Na efa nanao dinidinika tsy maintsy namaha zavatra mitovy amin'izany ianao, na nampihatra azy ireo nandritra ny fianarana JavaScript. Eny ary, fotoana izao hamahana azy ireo indray, ary miaraka amin'ny fanazavana amin'ny antsipiriany momba ny dingana.

Palindrome

Ny palindrome dia teny, fehezanteny na filaharan'ireo endri-tsoratra izay vakiana mitovy tanteraka na amin'ny lalana mahazatra na amin'ny lalana mifanohitra. Ohatra, ny "Anna" dia palindrome, fa ny "table" sy "John" dia tsy.

Staging

Nomena tady; mila manoratra asa izay ahafahanao mamerina marina ianao raha palindrome ny tadiny, ary diso raha tsy izany. Amin'ity tranga ity, mila mandinika ny habaka sy ny mari-piatoana ianao.

palindrome('racecar') === marina
palindrome('table') === false

Andeha hodinihintsika ny asa

Ny hevi-dehibe eto dia ny mamadika ny tady. Raha toa ka mitovy tanteraka amin'ilay voalohany ny tady "mivadika", dia nahazo palindrome izahay ary tokony hiverina marina ny fiasa. Raha tsy izany, diso.

fanapahan-kevitra

Ity ny code izay mamaha ny palindrome.

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('')
}

Ny dingana voalohany dia ny mamadika ireo tarehintsoratra ao amin'ny tady fampidirana ho litera kely. Izany dia antoka fa ny fandaharana dia hampitaha ny endri-tsoratra ny tenany, fa tsy tranga na zavatra hafa.

Ny dingana faharoa dia ny mamadika ny tsipika. Tsy sarotra ny manao izany: mila manova azy ho array ianao amin'ny alàlan'ny fomba .split() (String library). Avy eo dia mamadika ny array isika amin'ny fampiasana .reverse() (Array library). Ny dingana farany dia ny mamadika ny andry mivadika ho tady mampiasa .join() (Array library).

Ankehitriny ny hany ilainao atao dia ny mampitaha ny tady "mivadika" amin'ny tady tany am-boalohany, mamerina ny valiny marina na diso.

FizzBuzz

Iray amin'ireo asa malaza indrindra amin'ny dinidinika.

Staging

Mila manoratra asa izay manonta isa manomboka amin'ny 1 ka hatramin'ny n mankany amin'ny console ianao, ka ny n dia isa iray raisina ho mari-pamantarana, miaraka amin'ireto fepetra manaraka ireto:

  • Output fizz fa tsy maromaro amin'ny 3;
  • famoahana buzz fa tsy isa izay isa maromaro 5;
  • fizzbuzz vokatra fa tsy isa izay isa maromaro misy 3 sy 5.

ohatra

Fizzbuzz(5)

vokatra

// 1
// 2
// fizz
// 4
//buzz

Andeha hodinihintsika ny asa

Ny tena zava-dehibe eto dia ny fomba hahitana maromaro mampiasa JavaScript. Azo ampiharina amin'ny fampiasana ny operator modulus na ny ambiny -%, izay ahafahanao mampiseho ny ambiny rehefa mizara isa roa. Raha 0 ny ambiny dia midika izany fa ny isa voalohany dia maromaro amin'ny faharoa.

12% 5 // 2 -> 12 dia tsy isan'ny 5
12% 3 // 0 -> 12 dia maromaro amin'ny 3

Noho izany, raha mizara 12 amin'ny 5 ianao, dia mahazo 2 miaraka amin'ny ambiny 2. Raha mizara 12 amin'ny 3 ianao, dia mahazo 4 miaraka amin'ny 0 sisa. , 12 dia maromaro amin'ny 5.

fanapahan-kevitra

Ny vahaolana tsara indrindra dia ity code manaraka ity:

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)
    }
  }
}

Ny asa dia manao ny fanamarinana ilaina amin'ny fampiasana fanambarana misy fepetra ary mamokatra ny vokatra takian'ny mpampiasa. Ao amin'ny olana dia ilaina ny mandinika ny filaharan'ireo fanambarana raha ... hafa: manomboka amin'ny fepetra roa (&&) ary mifarana amin'ny tranga izay tsy nahitana isa maromaro. Vokatr'izany dia mirakitra ny safidy rehetra izahay.

Anagrama

Io no anaran'ny teny iray mirakitra ny litera rehetra amin'ny teny hafa amin'ny isa mitovy, fa amin'ny filaharana hafa.

Staging

Mila manoratra asa iray izay manamarina raha anagrama ny tady roa, ary tsy maninona ny raharaha. Ny litera ihany no isaina; tsy raisina ny habaka na mari-piatoana.

anagram('finder', 'Friend') -> marina
anagram('hello', 'bye') -> diso

Andeha hodinihintsika ny asa

Ny zava-dehibe tokony hodinihina eto dia mila manamarina ny litera tsirairay amin'ny andalana roa ianao ary ny isany isaky ny andalana.

mpikaroka -> f: namana 1 -> f: 1
ny: 1r:1
n:1 sy: 1
d: 1 sy: 1
e:1 n:1
r:1 d:1

Raha te hitahiry ny angona anagram dia tokony hisafidy rafitra toy ny literal object JavaScript ianao. Ny fanalahidy amin'ity tranga ity dia ny toetran'ny taratasy, ny sandany dia ny isan'ny famerimberenana azy amin'ny andalana ankehitriny.

Misy fepetra hafa:

  • Tokony ho azonao antoka fa tsy raisina an-tsaina ny trangan'ny taratasy rehefa mampitaha. Avadikay ho litera kely na ambony ny tadiny roa.
  • Esorinay amin'ny fampitahana ireo tsy manana toetra rehetra. Ny tsara indrindra hiarahana miasa fomba fiteny mahazatra.

fanapahan-kevitra

// 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
}

Tandremo ny fampiasana Object.keys() ao amin'ny sombiny etsy ambony. Ity fomba ity dia mamerina andiana misy anarana na fanalahidy mitovy amin'ny filaharan'izy ireo ao amin'ilay zavatra. Amin'ity tranga ity, ny array dia ho toy izao:

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

Amin'izany fomba izany no ahazoantsika ny toetran'ilay zavatra nefa tsy mila manao loop. Amin'ny olana iray, azonao atao ny mampiasa ity fomba ity miaraka amin'ny fananana .length mba hanamarinana raha mitovy ny isan'ny tarehin-tsoratra ny tady roa - izany dia singa manan-danja amin'ny anagrams.

Mitadiava zanatsoratra

Asa tsotra izay matetika miseho amin'ny dinidinika.

Staging

Mila manoratra asa izay maka tady ho tohan-kevitra ianao ary mamerina ny isan'ny zanatsoratra voarakitra ao anatin'ilay tady.
Ny zanatsoratra dia “a”, “e”, “i”, “o”, “u”.

ohatra:

findVowels('hello') // —> 2
findVowels('nahoana') // —> 0

fanapahan-kevitra

Ity ny safidy tsotra indrindra:

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
}

Zava-dehibe ny mandinika ny fampiasana ny fomba .includes(). Izy io dia misy amin'ny tady sy ny array. Tokony hampiasaina izy io mba hamaritana raha misy sanda iray ny array. Ity fomba ity dia miverina marina raha toa ka misy ny sanda voafaritra ny array, ary diso raha tsy misy izany.

Misy vahaolana fohy kokoa amin'ny olana:

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

Mampiasa ny fomba .match() izany, izay ahafahanao manatanteraka fikarohana mahomby. Raha toa ka hita ao anatin'ilay tady voatondro ny fanehoan-kevitra mahazatra ho toy ny tohan-kevitra momba ny fomba, ny sanda miverina dia andian-tsoratra mifanandrify. Eny ary, raha tsy misy lalao dia miverina null ny .match().

fibonacci

Asa mahazatra izay hita amin'ny dinidinika amin'ny ambaratonga samihafa. Tsara ny mampahatsiahy fa ny filaharan'ny Fibonacci dia andiana isa izay ny tsirairay manaraka dia ny fitambaran'ny roa teo aloha. Toy izao àry ny isa folo voalohany: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Staging

Mila manoratra fonction iray izay mamerina ny rakitsoratra faha-n amin'ny filaharana iray ianao, miaraka amin'ny n ny isa nomena ho tohan-kevitra amin'ny asa.

fibonacci(3) // —> 2

Tafiditra ao anatin'io asa io ny fandehanana amin'ny tady imbetsaka voatondro ao amin'ny tohan-kevitra, mamerina ny sanda amin'ny toerana mety. Ity fomba fametrahana ny olana ity dia mitaky ny fampiasana loops. Raha mampiasa recursion ianao, dia mety hampifaly ny mpanadinadina izany ary hanome anao hevitra fanampiny vitsivitsy.

fanapahan-kevitra

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]
}

Ao amin'ny laharan'ny valiny, ny isa roa voalohany dia voarakitra ao amin'ny andiany satria ny fidirana tsirairay ao amin'ny filaharana dia ny fitambaran'ny isa roa teo aloha. Amin'ny voalohany dia tsy misy isa roa azo alaina hahazoana ny isa manaraka, noho izany dia tsy afaka mamorona azy ireo ho azy ny loop. Saingy, araka ny fantatsika, ny isa roa voalohany dia 0 sy 1 foana. Noho izany, azonao atao ny manomboka amin'ny tanana ny laharan'ny valiny.

Raha ny recursion, ny zava-drehetra dia tsotra sy sarotra kokoa amin'ny fotoana iray ihany:

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)
}

Tsy mitsahatra miantso fibonacci (), mandalo isa kely sy kely kokoa ho tohan-kevitra. Mijanona isika rehefa 0 na 1 ny tohan-kevitra nandalo.

famaranana

Azo inoana fa efa sendra ny iray amin'ireo asa ireo ianao raha toa ka nitafatafa tamin'ny asa mpamolavola JavaScript (indrindra raha eo amin'ny ambaratonga zandriny). Fa raha mbola tsy nahita azy ireo ianao dia mety ho ilaina amin'ny ho avy - farafaharatsiny ho an'ny fampandrosoana ankapobeny.

Skillbox dia manoro hevitra:

Source: www.habr.com

Add a comment