Imisebenzi emi-5 ejwayelekile yengxoxo ye-JavaScript: ukuhlaziya nezisombululo

Imisebenzi emi-5 ejwayelekile yengxoxo ye-JavaScript: ukuhlaziya nezisombululo

Kusuka kumhumushi: ukushicilele isihloko U-Maria Antonietta Perna, okhuluma ngemisebenzi evamile ye-JavaScript, evame ukunikelwa kubafaki bezicelo zonjiniyela ngesikhathi senhlolokhono. I-athikili izoba wusizo, okokuqala, kubahleli abaqalayo.

Izingxoxo ezinkampanini zobuchwepheshe sekuyisikhathi eside zingundabamlonyeni. Lokhu akufanele kumangaze - ukuphumelela ngempumelelo inhlolokhono kukunika ithuba lokuthola umsebenzi omuhle. Kodwa lokhu akulula kangako, njengoba izinkinga eziyinkimbinkimbi ngokuvamile zidinga ukuxazululwa.

Ngaphezu kwalokho, ezikhathini eziningi, iningi lale misebenzi ayihlobene nomsebenzi ozokwenziwa umfakisicelo, kodwa kusadingeka ukuba ixazululwe. Kwesinye isikhathi kufanele ukwenze ebhodini, ngaphandle kokuhlola ne-Google nanoma yimuphi omunye umthombo. Yebo, isimo siyashintsha kancane kancane, futhi ezinye izinkampani zishiya izingxoxo ezinjalo, kodwa abaqashi abaningi basabambelele kuleli siko. Lesi sihloko sinikezelwe ekuhlaziyeni imisebenzi ejwayelekile ye-JavaScript evame ukusetshenziswa njengemisebenzi yabafuna umsebenzi.

Siyakukhumbuza: kubo bonke abafundi be-"Habr" - isaphulelo sama-ruble angu-10 lapho ubhalisa kunoma yisiphi isifundo se-Skillbox usebenzisa ikhodi yephromoshini ethi "Habr".

I-Skillbox iyancoma: Isifundo esiwusizo "I-Mobile Developer PRO".

Okubalulekile wukulungiselela kahle inhlolokhono yakho.

Yebo, ngaphambi kokuthi siqale ukubheka imisebenzi, ake sibheke amanye amathiphu okulungiselela inhlolokhono.

Into eyinhloko ukulungiselela kusengaphambili. Hlola ukuthi uwakhumbula kahle kangakanani ama-algorithms nezakhiwo zedatha, futhi uthuthukise ulwazi lwakho ezindaweni ongazazi kakhulu. Kunezinkundla eziningi eziku-inthanethi ezingakusiza ukuthi ulungiselele inhlolokhono. Siyeluleka I-GeeksforGeeks, I-Pramp, I-interviewing.io и ICodeSignal.

Kuyafaneleka ukufunda ukusho isinqumo ngokuzwakalayo. Kuyancomeka ukuthi utshele abafake izicelo ngalokho okwenzayo, futhi ungagcini ngokubhala ebhodini (noma uthayiphe ikhodi kukhompuyutha, futhi buthule). Ngale ndlela, uma wenza iphutha kukhodi, kodwa isisombululo ngokuvamile silungile, ungakwazi ukwandisa amathuba akho okuphumelela.

Udinga ukuqonda inkinga ngaphambi kokuba uqale ukuyixazulula. Kwezinye izimo, ungase uqonde umsebenzi kancane bese wehla ngendlela engafanele. Kungase kudingeke ukubuza imibuzo embalwa ecacisayo kobuza imibuzo.

Udinga ukuzijwayeza ukubhala ikhodi ngesandla, hhayi kwi-PC. Kwenzeka ukuthi phakathi nezingxoxo umfakisicelo anikezwe umaka kanye nebhodi elimhlophe, lapho kungekho khona ukusikisela noma ukufometha okuzenzakalelayo. Uma ufuna isixazululo, kufanelekile ukubhala ikhodi yakho ephepheni noma ngqo ebhodini. Uma ugcina yonke into ekhanda lakho, ungase ukhohlwe okuthile okubalulekile.

Imisebenzi yesifanekiso ku-JavaScript

Eminye yale misebenzi cishe usuyijwayele kakade. Kungenzeka ukuthi ube nezingxoxo lapho bekufanele uxazulule okuthile okufanayo, noma uzilolonge kuzo ngenkathi ufunda i-JavaScript. Nokho, manje sekuyisikhathi sokuzixazulula futhi, kanye nencazelo enemininingwane yenqubo.

I-Palindrome

I-palindrome yigama, umusho noma ukulandelana kwezinhlamvu ezifundwa ngokufana ncamashi kokubili ngendlela evamile nakwehlukile. Isibonelo, u-“Anna” uyi-palindrome, kodwa “itafula” kanye no-“John” akuzona.

Ukudlala

Inikezwe intambo; udinga ukubhala umsebenzi okuvumela ukuthi ubuyisele iqiniso uma iyunithi yezinhlamvu iyi-palindrome, futhi ingamanga uma kungenjalo. Kulesi simo, udinga ukucabangela izikhala nezimpawu zokubhala.

palindrome('racecar') === iqiniso
palindrome('table') === amanga

Ake sihlaziye umsebenzi

Umqondo oyinhloko lapha uwukuhlehlisa umucu. Uma iyunithi yezinhlamvu “ehlehlayo” ifana ngokuphelele neyokuqala, khona-ke sithole i-palindrome futhi umsebenzi kufanele ubuyele iqiniso. Uma kungenjalo, amanga.

Isixazululo

Nansi ikhodi exazulula i-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('')
}

Isinyathelo sokuqala ukuguqula izinhlamvu kuyunithi yezinhlamvu zokufaka zibe izinhlamvu ezincane. Lesi isiqinisekiso sokuthi uhlelo luzoqhathanisa abalingiswa ngokwabo, hhayi icala noma enye into.

Isinyathelo sesibili ukuhlehlisa umugqa. Lokhu akunzima ukukwenza: udinga ukuguqulela kumalungu afanayo usebenzisa indlela .split() (umtapo wocingo). Bese sihlehlisa amalungu afanayo sisebenzisa .reverse() (Array library). Isinyathelo sokugcina ukuguqula amalungu afanayo ahlehlayo abe yiyunithi yezinhlamvu usebenzisa .join() (I-Array Library).

Manje okudingeka ukwenze ukuqhathanisa iyunithi yezinhlamvu “ehlehlayo” neyunithi yezinhlamvu yasekuqaleni, ubuyisele umphumela iqiniso noma amanga.

I-FizzBuzz

Omunye wemisebenzi edume kakhulu ezingxoxweni.

Ukudlala

Udinga ukubhala umsebenzi ophrinta izinombolo ukusuka ku-1 kuye ku-n kuya kukhonsoli, lapho u-n eyinombolo ephelele ethathwa umsebenzi njengepharamitha, enemibandela elandelayo:

  • i-fizz ephumayo esikhundleni sokuphindaphinda koku-3;
  • i-output buzz esikhundleni sezinombolo eziyiziphindaphinda zoku-5;
  • okukhiphayo kwe-fizzbuzz esikhundleni sezinombolo eziyiziphindaphinda zakho kokubili u-3 no-5.

Isibonelo:

I-Fizzbuzz(5)

Umphumela

// 1
// 2
// izulu
// 4
//buzz

Ake sihlaziye umsebenzi

Into esemqoka lapha indlela yokuthola iziphindaphinda usebenzisa i-JavaScript. Ingasetshenziswa kusetshenziswa i-modulus opharetha noma okusele - %, okukuvumela ukuthi ubonise okusele lapho uhlukanisa izinombolo ezimbili. Uma okusele kungu-0, kusho ukuthi inombolo yokuqala iyiphindwaphindwa yesibili.

12% 5 // 2 -> 12 akuyona impinda ka-5
12% 3 // 0 -> 12 iyiphindaphinda koku-3

Ngakho-ke, uma uhlukanisa u-12 ngo-5, uthola u-2 ngensalela ka-2. Uma uhlukanisa u-12 ngo-3, uthola u-4 nensalela ka-0. Esimeni sokuqala, u-12 akayona impinda ka-5, okwesibili. , 12 iyimpinda ka-3.

Isixazululo

Isixazululo esilungile kungaba ikhodi elandelayo:

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

Umsebenzi wenza ukuhlola okudingekile usebenzisa izitatimende ezinemibandela futhi ukhiqize umphumela odingwa umsebenzisi. Enkingeni, kufanelekile ukunaka ukuhleleka kwezitatimende zokuthi uma...okunye: qala ngesimo esikabili (&&) bese uphetha ngesimo lapho izinombolo eziningi zingatholakalanga. Ngenxa yalokho, sihlanganisa zonke izinketho.

I-Anagram

Leli igama legama eliqukethe zonke izinhlamvu zelinye igama enombolweni efanayo, kodwa ngokulandelana okuhlukile.

Ukudlala

Sidinga ukubhala umsebenzi ohlola ukuthi izintambo ezimbili zingama-anagram, futhi icala alinandaba. Izinhlamvu kuphela ezibalwayo; izikhala noma izimpawu zokuloba azinakwa.

anagram('finder', 'Friend') -> iqiniso
i-anagram('hello', 'bye') -> amanga

Ake sihlaziye umsebenzi

Into ebalulekile okufanele uyicabangele lapha ukuthi udinga ukuhlola uhlamvu ngalunye emigqeni yokufaka emibili kanye nenombolo yabo emgqeni ngamunye.

isitholi —> f: 1 umngane —> f: 1
ngi:1:1
n:1 i:1
d:1 e:1
e:1 n:1
r:1 :1

Ukuze ugcine idatha ye-anagram, kufanele ukhethe isakhiwo esifana nento ye-JavaScript engokoqobo. Isihluthulelo kuleli cala uhlamvu lwencwadi, inani liyinombolo yokuphindaphinda kwalo emgqeni wamanje.

Kunezinye izimo:

  • Kudingeka uqiniseke ukuthi icala lezinhlamvu alinakwa lapho uqhathanisa. Simane siguqule zombili izintambo zibe ngosonhlamvukazi noma abakhulu.
  • Asibafaki bonke abangebona abalingisi esiqhathanisweni. Okungcono kakhulu ukusebenza izinkulumo ezivamile.

Isixazululo

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

Naka ukusetshenziswa Object.keys() amazwibela angenhla. Le ndlela ibuyisela amalungu afanayo aqukethe amagama noma okhiye ngokulandelana okufanayo navela entweni. Kulokhu, i-array izoba kanje:

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

Ngale ndlela sithola izici zento ngaphandle kokwenza iluphu yenqwaba. Enkingeni, ungasebenzisa le ndlela ngesakhiwo .ubude ukuze uhlole ukuthi zombili izintambo zinenombolo efanayo yezinhlamvu - lesi isici esibalulekile sama-anagrams.

Sesha onkamisa

Umsebenzi olula ovame ukuvela ezingxoxweni.

Ukudlala

Udinga ukubhala umsebenzi othatha iyunithi yezinhlamvu njengengxabano bese ubuyisela inombolo yonkamisa abaqukethwe umucu.
Onkamisa bango “a”, “e”, “i”, “o”, “u”.

Isibonelo:

thola onkamisa('sawubona') // —> 2
thola onkamisa('kungani') // —> 0

Isixazululo

Nansi inketho elula kakhulu:

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
}

Kubalulekile ukunaka ukusetshenziswa kwendlela ethi .includes(). Iyatholakala kuzo zombili izintambo nama-array. Kufanele isetshenziselwe ukunquma ukuthi ingabe amalungu afanayo aqukethe inani elithile. Le ndlela ibuyisela iqiniso uma amalungu afanayo equkethe inani elishiwo, futhi amanga uma kungenjalo.

Kunesixazululo esifushane senkinga:

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

Lokhu kusebenzisa indlela .match(), ekuvumela ukuthi usebenzise usesho olusebenzayo. Uma isisho esivamile njenge-agumenti yendlela sitholakala ngaphakathi kweyunithi yezinhlamvu eshiwo, inani lokubuyisela liwuchungechunge lwezinhlamvu ezifanayo. Hhayi-ke, uma kungekho okufanayo, okuthi .match() ibuyisele null.

i-fibonacci

Umsebenzi wakudala ongatholakala ezingxoxweni emazingeni ahlukahlukene. Kuhle ukukhumbula ukuthi ukulandelana kwe-Fibonacci kuwuchungechunge lwezinombolo lapho ngayinye elandelayo iyisamba salezi ezimbili ezedlule. Ngakho, izinombolo zokuqala eziyishumi zibukeka kanje: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Ukudlala

Udinga ukubhala umsebenzi obuyisela irekhodi le-nth ngokulandelana okuthile, futhi u-n eyinombolo edluliswa njenge-agumenti kumsebenzi.

i-fibonacci(3) // —> 2

Lo msebenzi uhlanganisa ukuhamba ku-loop inombolo yezikhathi ezishiwo ku-agumenti, ubuyisela inani endaweni efanele. Le ndlela yokubeka inkinga idinga ukusetshenziswa kwezihibe. Uma usebenzisa i-recursion esikhundleni salokho, kungase kujabulise obuza imibuzo futhi ikunikeze amaphuzu ambalwa engeziwe.

Isixazululo

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

Ohlelweni lwemiphumela, izinombolo ezimbili zokuqala ziqukethwe ochungechungeni ngoba okufakiwe ngakunye ngokulandelana kuyisamba sezinombolo ezimbili zangaphambilini. Ekuqaleni azikho izinombolo ezimbili ezingathathwa ukuze kutholwe inombolo elandelayo, ngakho-ke iluphu ayikwazi ukuzikhiqiza ngokuzenzakalelayo. Kodwa, njengoba sazi, izinombolo ezimbili zokuqala zihlala zingu-0 no-1. Ngakho-ke, ungakwazi ukuqalisa uhlu lwemiphumela ngesandla.

Ngokuqondene nokuphindaphinda, konke kulula futhi kuyinkimbinkimbi kakhulu ngesikhathi esifanayo:

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

Silokhu sibiza i-fibonacci(), sidlulisa izinombolo ezincane nezincane njengama-agumenti. Siyama lapho ukungqubuzana okuphasisiwe kungu-0 noma u-1.

isiphetho

Kungenzeka ukuthi usuvele uhlangabezane nanoma yimiphi yale misebenzi uma kuxoxiswene nabo ukuze uthole umsebenzi wokuthuthukisa i-JavaScript (ikakhulukazi uma usezingeni elincane). Kodwa uma ungakahlangani nazo, zingase zibe usizo esikhathini esizayo - okungenani ekuthuthukisweni okujwayelekile.

I-Skillbox iyancoma:

Source: www.habr.com

Engeza amazwana