5 mau hana ninaninau JavaScript maʻamau: ka nānā ʻana a me nā hoʻonā

5 mau hana ninaninau JavaScript maʻamau: ka nānā ʻana a me nā hoʻonā

Mai ka mea unuhi: paʻi ʻatikala iā ʻoe ʻO Maria Antonietta Perna, nāna e kamaʻilio e pili ana i nā hana JavaScript maʻamau, hāʻawi pinepine ʻia i nā mea noi hoʻomohala i ka wā ninaninau. E lilo ka ʻatikala i mea pono, ʻo ka mea mua, i nā mea papahana novice.

ʻO nā nīnauele ma nā hui ʻenehana ua lōʻihi ka kamaʻilio ʻana o ke kaona. ʻAʻole kēia he mea kahaha - ʻo ka hele ʻana i kahi hālāwai ninaninau e hāʻawi iā ʻoe i ka manawa e loaʻa ai kahi hana maikaʻi. Akā ʻaʻole maʻalahi kēia, no ka mea pono e hoʻoponopono pinepine ʻia nā pilikia paʻakikī.

Eia kekahi, i ka manawa pinepine, ʻaʻole pili ka hapa nui o kēia mau hana i ka hana a ka mea noi e hana ai, akā pono lākou e hoʻoholo. I kekahi manawa pono ʻoe e hana ma ka papa, me ka nānā ʻole ʻana me Google a i ʻole nā ​​kumu ʻē aʻe. ʻAe, ke loli mālie nei ke kūlana, a ke haʻalele nei kekahi mau hui i kēlā mau nīnauele, akā nui nā mea hana e hoʻomau nei i kēia kuʻuna. Hāʻawi kēia ʻatikala i ka nānā ʻana i nā hana JavaScript maʻamau i hoʻohana pinepine ʻia ma ke ʻano he mau hana no ka poʻe ʻimi hana.

Hoʻomaopopo mākou iā ʻoe: no ka poʻe heluhelu a pau o "Habr" - kahi ho'ēmi o 10 rubles i ka wā e kākau inoa ai i kekahi papa Skillbox e hoʻohana ana i ka code promotional "Habr".

Manaʻo ʻo Skillbox: Papa hana "Hoʻolālā Mobile PRO".

ʻO ka mea nui e hoʻomākaukau pono no kāu nīnauele.

ʻAe, ma mua o ka hoʻomaka ʻana e nānā i nā hana, e nānā kākou i kekahi mau ʻōlelo aʻoaʻo hoʻomākaukau no ka ninaninau.

ʻO ka mea nui e hoʻomākaukau i mua. E hoʻāʻo i ka maikaʻi o kou hoʻomanaʻo ʻana i nā algorithm a me nā kūkulu ʻikepili, a hoʻomaikaʻi i kou ʻike ma nā wahi āu i kamaʻāina ʻole ai. Nui nā pūnaewele pūnaewele e hiki ke kōkua iā ʻoe e hoʻomākaukau no nā nīnauele. Kūkākūkā mākou geeksforgeeks, Pramp, Nīnauele.io и Kānāwai Kaha.

Pono e aʻo e haʻi i ka hoʻoholo me ka leo nui. Pono e haʻi i nā mea noi e pili ana i kāu hana, a ʻaʻole e kākau wale ma ka papa (a i ʻole e paʻi i ka code i loko o ke kamepiula, me ka leo ʻole). ʻO kēia ala, inā hana hewa ʻoe i ke code, akā pololei ka hopena, hiki iā ʻoe ke hoʻonui i kou kūlana lanakila.

Pono ʻoe e hoʻomaopopo i ka pilikia ma mua o kou hoʻomaka ʻana e hoʻoponopono. I kekahi mau hihia, hoʻomaopopo paha ʻoe i kahi hana a laila hele i ke ala hewa. Pono paha e nīnau i kekahi mau nīnau wehewehe i ka mea nīnau nīnau.

Pono ʻoe e hoʻomaʻamaʻa i ke kākau ʻana ma ka lima, ʻaʻole ma ka PC. I ka wā o nā nīnauele, hāʻawi ʻia ka mea noi i kahi māka a me kahi papa keʻokeʻo, kahi i loaʻa ʻole ai nā hōʻailona a i ʻole nā ​​​​hōpili maʻalahi. Ke ʻimi nei i kahi hoʻonā, pono ke kākau ʻana i kāu code ma kahi ʻāpana pepa a i ʻole pololei ma ka papa. Inā mālama ʻoe i nā mea a pau i kou poʻo, poina paha ʻoe i kekahi mea nui.

Nā hana template ma JavaScript

Ua kamaʻāina paha kekahi o kēia mau hana iā ʻoe. Ua loaʻa iā ʻoe nā nīnauele kahi āu e hoʻoponopono ai i kahi mea like, a i ʻole hoʻomaʻamaʻa iā lākou i ke aʻo ʻana i ka JavaScript. ʻAe, ʻo ka manawa kēia e hoʻoponopono hou iā lākou, a me ka wehewehe kikoʻī o ke kaʻina hana.

Palindrome

ʻO ka palindrome ka huaʻōlelo, ka ʻōlelo a i ʻole ke ʻano o nā huaʻōlelo i heluhelu like ʻia ma ka ʻaoʻao maʻamau a ma ka ʻaoʻao ʻē aʻe. No ka laʻana, he palindrome ʻo "Anna", akā ʻaʻole ʻo "papa" a me "John".

Keaka

Hāʻawi ʻia i kahi kaula; pono ʻoe e kākau i kahi hana e hiki ai iā ʻoe ke hoʻihoʻi ʻoiaʻiʻo inā he palindrome ke kaula, a he wahaheʻe inā ʻaʻole. I kēia hihia, pono ʻoe e noʻonoʻo i nā hakahaka a me nā kaha kaha.

palindrome('racecar') === ʻoiaʻiʻo
palindrome('papa') === wahahee

E kālailai kākou i ka hana

ʻO ka manaʻo nui ma ʻaneʻi e hoʻohuli i ke kaula. Inā like loa ke kaula "ho'ohuli" me ke kaula kumu, a laila ua loa'a iā mākou kahi palindrome a pono e ho'i 'oia'i'o ka hana. Inā ʻaʻole, wahaheʻe.

olelo hooholo

Eia ke code e hoʻonā i ka 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('')
}

ʻO ka hana mua, ʻo ia ka hoʻololi ʻana i nā huaʻōlelo i ke kaula hoʻokomo i ka helu haʻahaʻa. He hōʻoia kēia e hoʻohālikelike ka papahana i nā huaʻōlelo iā lākou iho, ʻaʻole ka hihia a i ʻole kekahi mea ʻē aʻe.

ʻO ka hana ʻelua e hoʻohuli i ka laina. ʻAʻole paʻakikī kēia e hana: pono ʻoe e hoʻololi iā ia i kahi laha me ka hoʻohana ʻana i ke ala .split() (String library). A laila hoʻohuli mākou i ka laha me ka hoʻohana ʻana i ka .reverse() (Array library). ʻO ka hana hope loa, ʻo ia ka hoʻololi ʻana i ke kāʻei hope i kahi kaula me ka hoʻohana ʻana i ka .join() (Array library).

ʻO nā mea a pau āu e hana ai, ʻo ia ke hoʻohālikelike i ke kaula "reverse" me ke kaula kumu, e hoʻihoʻi i ka hopena ʻoiaʻiʻo a i ʻole.

FizzBuzz

ʻO kekahi o nā hana kaulana loa i nā nīnauele.

Keaka

Pono ʻoe e kākau i kahi hana e paʻi ana i nā helu mai ka 1 a i ka n i ka console, kahi n he helu helu e lawe ʻia ka hana ma ke ʻano he ʻāpana, me nā kūlana penei:

  • hoʻopuka i ka fizz ma kahi o nā mea he 3;
  • ka leo hoʻopuka ma kahi o nā helu he 5;
  • fizzbuzz hoʻopuka ma kahi o nā helu he mau huahelu o 3 a me 5.

Pākuhi:

Fizzbuzz(5)

hopena

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

E kālailai kākou i ka hana

ʻO ka mea nui ma ʻaneʻi he ala e ʻike ai i nā lehulehu me ka hoʻohana ʻana i ka JavaScript. Hiki ke hoʻokō ʻia me ka hoʻohana ʻana i ka modulus operator a i ʻole ke koena - %, hiki iā ʻoe ke hōʻike i ke koena i ka wā e puʻunaue ana i ʻelua mau helu. Inā he 0 ke koena, ʻo ia hoʻi, ʻo ka helu mua ka helu o ka lua.

12% 5 // 2 -> 12 ʻaʻole ia he paʻa o 5
12% 3 // 0 -> 12 ka nui o 3

No laila, inā e puunaue ʻoe i ka 12 me 5, loaʻa iā ʻoe ka 2 me ke koena o 2. Inā e puʻunaue ʻoe i ka 12 me 3, loaʻa iā ʻoe ka 4 me ke koena o 0. Ma ka hihia mua, ʻaʻole ka 12 he huina o 5, ma ka lua. , 12 ka huina o 3.

olelo hooholo

ʻO ka hopena maikaʻi loa ʻo ia kēia code:

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

Hana ka hana i nā loiloi pono me ka hoʻohana ʻana i nā ʻōlelo kūlana a hoʻopuka i ka hopena i koi ʻia e ka mea hoʻohana. I ka pilikia, pono e hoʻolohe i ke ʻano o nā ʻōlelo inā ... ʻē aʻe: e hoʻomaka me kahi kūlana pālua (&&) a hoʻopau me ka hihia i hiki ʻole ke loaʻa nā helu he nui. ʻO ka hopena, uhi mākou i nā koho a pau.

Anagram

ʻO kēia ka inoa o ka huaʻōlelo i loaʻa nā hua a pau o kekahi huaʻōlelo ma ka helu hoʻokahi, akā ma kahi ʻano ʻokoʻa.

Keaka

Pono mākou e kākau i kahi hana e nānā inā he anagrams ʻelua mau kaula, a ʻaʻole pili ka hihia. ʻO nā huaʻōlelo wale nō i helu ʻia; ʻAʻole mālama ʻia nā hakahaka a i ʻole nā ​​kaha kaha.

anagram('finder', 'Friend') —> oiaio
anagram('hello', 'bye') -> wahaheʻe

E kālailai kākou i ka hana

ʻO ka mea nui e noʻonoʻo ai ma aneʻi, pono ʻoe e nānā i kēlā me kēia leka ma nā laina komo ʻelua a me kā lākou helu i kēlā me kēia laina.

ʻimi —> f: 1 hoa —> f: 1
i: 1 r: 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1

No ka mālama ʻana i ka ʻikepili anagram, pono ʻoe e koho i kahi hoʻolālā e like me kahi mea JavaScript maoli. ʻO ke kī i kēia hihia ke ʻano o ka leka, ʻo ka waiwai ka helu o kāna mau hana hou ʻana i ka laina o kēia manawa.

Aia nā kūlana ʻē aʻe:

  • Pono ʻoe e hōʻoia ʻaʻole i mālama ʻia ka hihia o nā leka i ka wā e hoʻohālikelike ai. Hoʻololi wale mākou i nā kaula ʻelua i ka helu haʻahaʻa a i luna paha.
  • Hoʻokaʻawale mākou i nā huaʻōlelo ʻole a pau mai ka hoʻohālikelike. ʻOi aku ka maikaʻi e hana pū me nā ʻōlelo maʻamau.

olelo hooholo

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

E nānā i ka hoʻohana Object.keys() ma ka snippet ma luna. Hoʻihoʻi kēia ʻano hana i kahi ʻano i loaʻa nā inoa a i ʻole nā ​​kī ma ke ʻano like i hōʻike ʻia i loko o ka mea. I kēia hihia, e like ka array:

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

Ma kēia ala e loaʻa ai iā mākou nā waiwai o ka mea me ka ʻole e hana i kahi loop bulk. Ma kahi pilikia, hiki iā ʻoe ke hoʻohana i kēia ʻano me ka waiwai .length e nānā inā loaʻa i nā kaula ʻelua ka helu like o nā huapalapala - he mea nui kēia o nā anagrams.

Huli i nā leo leo

ʻO kahi hana maʻalahi e puka pinepine mai i nā nīnauele.

Keaka

Pono ʻoe e kākau i kahi hana e lawe i kahi kaula i mea hoʻopaʻapaʻa a hoʻihoʻi i ka helu o nā leo i loko o ke kaula.
ʻO nā leo leo "a", "e", "i", "o", "u".

Pākuhi:

findVowels('hello') // —> 2
findVowels('no ke aha') // —> 0

olelo hooholo

Eia ke koho maʻalahi loa:

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
}

He mea nui e hoʻolohe i ka hoʻohana ʻana i ke ʻano .includes(). Loaʻa ia no nā kaula a me nā arrays. Pono e hoʻohana ʻia e hoʻoholo inā loaʻa i kahi laʻa kekahi waiwai. Hoʻihoʻi mai kēia ʻano i ka ʻoiaʻiʻo inā loaʻa i ka array ka waiwai i ʻōlelo ʻia, a he wahaheʻe inā ʻaʻole.

Aia kahi hopena pōkole i ka pilikia:

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

Hoʻohana kēia i ke ʻano .match() e hiki ai iā ʻoe ke hoʻokō i kahi hulina kūpono. Inā ʻike ʻia kahi ʻōlelo maʻamau ma ke ʻano he kumu hoʻopaʻapaʻa i loko o ke kaula i kuhikuhi ʻia, a laila ʻo ka waiwai hoʻihoʻi he ʻano o nā huaʻōlelo like. ʻAe, inā ʻaʻohe pāʻani, a laila hoʻihoʻi ka .match() i ka null.

fibonacci

He hana maʻamau i loaʻa ma nā nīnauele ma nā pae like ʻole. He mea pono e hoʻomanaʻo ʻo ka Fibonacci sequence he pūʻulu o nā helu i kēlā me kēia ma hope o ka huina o nā mea ʻelua i hala. No laila, ua like nā helu mua he ʻumi: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Keaka

Pono ʻoe e kākau i kahi hana e hoʻihoʻi i ka moʻolelo n i kekahi kaʻina, me ka n ka helu i hoʻoholo ʻia ma ke ʻano he hoʻopaʻapaʻa i ka hana.

fibonacci(3) // —> 2

ʻO kēia hana e pili ana i ka hele ʻana ma kahi loop i ka helu o nā manawa i kuhikuhi ʻia i ka hoʻopaʻapaʻa, e hoʻihoʻi i ka waiwai ma ke kūlana kūpono. ʻO kēia ala e hoʻopuka ai i ka pilikia e pono ai ka hoʻohana ʻana i nā loops. Inā hoʻohana ʻoe i ka recursion ma kahi, e ʻoluʻolu paha ia i ka mea nīnau nīnau a hāʻawi iā ʻoe i kekahi mau kikoʻī.

olelo hooholo

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

I loko o ka pūʻulu hualoaʻa, aia nā helu mua ʻelua i loko o ka moʻo no ka mea ʻo kēlā me kēia komo ʻana i ke kaʻina ka huina o nā helu ʻelua i hala. I ka hoʻomaka ʻana, ʻaʻohe helu ʻelua i hiki ke lawe ʻia e kiʻi i ka helu aʻe, no laila ʻaʻole hiki i ka loop ke hana maʻalahi iā lākou. Akā, e like me kā mākou ʻike, ʻo nā helu mua ʻelua he 0 a me 1 mau.

No ka recursion, ua maʻalahi nā mea a pau a ʻoi aku ka paʻakikī i ka manawa like:

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

Ke kāhea nei mākou i ka fibonacci(), e hele ana i nā helu liʻiliʻi a liʻiliʻi ma ke ʻano he mau hoʻopaʻapaʻa. Kū mākou inā 0 a i ʻole 1 ka manaʻo i hala.

hopena

ʻO ka mea nui paha, ua hālāwai mua ʻoe i kekahi o kēia mau hana inā ua nīnauele ʻia ʻoe no kahi hana hoʻomohala mua a JavaScript paha (ʻoi loa inā aia ma ka pae ʻōpio). Akā inā ʻaʻole ʻoe i ʻike iā lākou, pono paha lākou i ka wā e hiki mai ana - ma ka liʻiliʻi no ka hoʻomohala ākea.

Manaʻo ʻo Skillbox:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka