5 na al'ada JavaScript ayyuka na hira: bincike da mafita

5 na al'ada JavaScript ayyuka na hira: bincike da mafita

Daga mai fassara: buga muku labarin Maria Antonietta Perna, wanda ke magana game da ayyukan JavaScript na gama gari, galibi ana bayarwa ga masu neman haɓakawa yayin tambayoyi. Labarin zai zama da amfani, da farko, ga novice shirye-shirye.

Tambayoyi a kamfanonin fasaha sun dade suna magana a garin. Wannan bai kamata ya zama abin mamaki ba - samun nasarar yin hira yana ba ku damar samun aiki mai kyau. Amma wannan ba mai sauƙi ba ne, tun da sau da yawa matsaloli masu rikitarwa suna buƙatar magance su.

Bugu da ƙari, galibi, yawancin waɗannan ayyuka ba su da alaƙa da aikin da mai nema zai yi, amma har yanzu suna buƙatar a warware su. Wani lokaci dole ne ku yi shi a kan allo, ba tare da bincika Google ko wata tushe ba. Haka ne, yanayin yana canzawa a hankali, kuma wasu kamfanoni suna yin watsi da irin waɗannan tambayoyin, amma yawancin masu daukan ma'aikata suna bin wannan al'ada. Wannan labarin ya keɓe don nazarin ayyukan JavaScript na yau da kullun waɗanda galibi ana amfani da su azaman ayyuka ga masu neman aiki.

Muna tunatarwa: ga duk masu karatu na "Habr" - rangwame na 10 rubles lokacin yin rajista a kowane kwas na Skillbox ta amfani da lambar talla "Habr".

Skillbox yana ba da shawarar: Hakikanin hanya "Mobile Developer PRO".

Babban abu shine ku shirya sosai don hirar ku.

Ee, kafin mu fara duba ayyukan, bari mu kalli wasu shawarwarin shirye-shiryen hira gabaɗaya.

Babban abu shine a shirya a gaba. Gwada yadda kuka tuna algorithms da tsarin bayanai, kuma inganta ilimin ku a wuraren da ba ku saba da su ba. Akwai dandamali da yawa akan layi waɗanda zasu iya taimaka muku shirya tambayoyi. Muna ba da shawara geeksforgeeks, Gwada, Tambayoyi.io и LambarSignal.

Yana da kyau koyan faɗin shawarar da babbar murya. Yana da kyau a gaya wa masu neman abin da kuke yi, kuma ba kawai rubuta a kan allo ba (ko rubuta lamba a cikin kwamfutar, har ma da shiru). Ta wannan hanyar, idan kun yi kuskure a cikin lambar, amma mafita gabaɗaya daidai ne, zaku iya ƙara damar samun nasara.

Kuna buƙatar fahimtar matsalar kafin ku fara magance ta. A wasu lokuta, kuna iya fahimtar aiki a zahiri sannan ku bi hanyar da ba ta dace ba. Yana iya zama darajar yin ƴan tambayoyi masu fayyace wa mai tambayoyin.

Kuna buƙatar yin aikin rubuta lambar da hannu, ba akan PC ba. Yakan faru ne a yayin hirar da ake yi wa mai nema alamar da allo, inda babu alamu ko tsara ta atomatik. Lokacin neman mafita, yana da kyau a rubuta lambar ku a kan takarda ko kai tsaye a kan allo. Idan kun ajiye komai a cikin ku, kuna iya manta da wani muhimmin abu.

Ayyukan samfuri a JavaScript

Wataƙila wasu daga cikin waɗannan ayyuka sun saba muku. Ko dai kun yi hira inda dole ne ku warware wani abu makamancin haka, ko kuma kuyi aiki dasu yayin koyon JavaScript. To, yanzu lokaci ya yi da za a sake warware su, kuma tare da cikakken bayani game da tsari.

Palindrome

Palindrome kalma ce, jimla ko jerin haruffa waɗanda aka karanta daidai ɗaya duka a al'adar al'ada da kuma a gaba. Alal misali, "Anna" palindrome ne, amma "tebur" da "John" ba.

Zazzagewa

An ba da kirtani; kuna buƙatar rubuta aikin da zai ba ku damar dawo da gaskiya idan kirtani palindrome ne, kuma ƙarya idan ba haka ba. A wannan yanayin, kuna buƙatar yin la'akari da sarari da alamomin rubutu.

palindrome ('racecar') === gaskiya
palindrome ('tebur') === ƙarya

Bari mu bincika aikin

Babban ra'ayi anan shine a juyar da kirtani. Idan kirtani "reverse" gaba ɗaya tayi kama da na asali, to mun sami palindrome kuma aikin yakamata ya dawo gaskiya. Idan ba haka ba, karya.

yanke shawara

Ga lambar da ke warware 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('')
}

Mataki na farko shine canza haruffan da ke cikin kirtan shigarwa zuwa ƙananan harafi. Wannan garantin ne cewa shirin zai kwatanta haruffan kansu, kuma ba harka ko wani abu ba.

Mataki na biyu shine juya layin. Wannan ba shi da wahala a yi: kuna buƙatar jujjuya shi zuwa tsararru ta amfani da hanyar .split() (Labaran Laburare). Sa'an nan kuma mu juya tsararru ta amfani da .reverse() (Array library). Mataki na ƙarshe shine a juyar da jeri na baya zuwa kirtani ta amfani da .join() (Laburare Array).

Yanzu duk abin da kuke buƙatar ku yi shine kwatanta kirtan "reverse" tare da asalin kirtani, mayar da sakamakon gaskiya ko ƙarya.

FizzBuzz

Ɗaya daga cikin shahararrun ayyuka a cikin hira.

Zazzagewa

Kuna buƙatar rubuta aikin da ke buga lambobi daga 1 zuwa n zuwa na'ura wasan bidiyo, inda n shine lamba wanda aikin ke ɗauka azaman ma'auni, tare da waɗannan sharuɗɗa:

  • fitarwa fizz maimakon ɗimbin yawa na 3;
  • fitar da kugi maimakon lambobi waɗanda ke da yawa na 5;
  • fizzbuzz fitarwa maimakon lambobi waɗanda ke da yawa na 3 da 5.

Alal misali:

Fizzbuzz (5)

sakamakon

// 1
// 2
// fizge
// 4
//ciwon

Bari mu bincika aikin

Babban abu anan shine hanya don nemo masu yawa ta amfani da JavaScript. Ana iya aiwatar da shi ta amfani da ma'aikacin modules ko saura - %, wanda ke ba ku damar nuna ragowar lokacin raba lambobi biyu. Idan ragowar 0 ne, yana nufin cewa lambar farko ita ce maɗaukakin na biyu.

12% 5 // 2 -> 12 ba yawan 5 ba ne
12% 3 // 0 -> 12 yana da yawa na 3

Don haka, idan ka raba 12 zuwa 5, zaka sami 2 tare da saura na 2. Idan ka raba 12 zuwa 3, zaka sami 4 tare da saura na 0. A yanayin farko, 12 ba ma'auni na 5 ba ne, a na biyu. , 12 shine ma'auni na 3.

yanke shawara

Mafi kyawun mafita shine lambar mai zuwa:

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

Ayyukan yana yin abubuwan da suka dace ta amfani da maganganun sharadi kuma yana samar da sakamakon da mai amfani ke buƙata. A cikin matsalar, yana da kyau a kula da tsari na idan ... sauran maganganun: fara da yanayin sau biyu (&&) kuma ƙare tare da yanayin inda ba a iya samun lambobi masu yawa ba. A sakamakon haka, mun rufe duk zaɓuɓɓuka.

Anagram

Wannan shine sunan kalmar da ta ƙunshi dukkan haruffan wata kalma a lamba ɗaya, amma a cikin wani tsari daban.

Zazzagewa

Muna buƙatar rubuta aikin da ke bincika ko kirtani biyu anagrams ne, kuma shari'ar ba ta da matsala. Haruffa kawai ake ƙidaya; Ba a la'akari da sarari ko alamomin rubutu.

anagram ('finder', 'Aboki') -> gaskiya
anagram ('hello', 'bye') -> ƙarya

Bari mu bincika aikin

Muhimmin abin da za a yi la’akari da shi a nan shi ne, kuna buƙatar bincika kowane harafi a cikin layukan shigarwa guda biyu da lambar su a kowane layi.

mai nema —> f: 1 aboki —> f: 1
ku: 1r: 1
n: 1 ku:1
d: 1 ku: 1
ku: 1 n:1
ku: 1 d:1

Don adana bayanan anagram, yakamata ku zaɓi tsari kamar abin JavaScript na zahiri. Makullin a cikin wannan yanayin shine halin harafin, ƙimar ita ce adadin maimaitawarsa a cikin layi na yanzu.

Akwai wasu sharudda:

  • Kuna buƙatar tabbatar da cewa ba a la'akari da batun haruffa yayin kwatantawa. Muna kawai musanya duka igiyoyin biyu zuwa ƙananan ko babba.
  • Mun keɓe duk waɗanda ba haruffa daga kwatancen. Mafi kyawun aiki tare da maganganu na yau da kullun.

yanke shawara

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

Kula da amfani Object.keys() a cikin snippet na sama. Wannan hanyar tana mayar da tsararru mai ɗauke da sunaye ko maɓalli a cikin tsari iri ɗaya da suka bayyana a cikin abun. A wannan yanayin, tsarin zai kasance kamar haka:

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

Ta wannan hanyar muna samun kaddarorin abu ba tare da yin babban madauki ba. A cikin matsala, zaka iya amfani da wannan hanya tare da dukiya na tsawon lokaci don duba ko duka igiyoyi suna da adadin haruffa iri ɗaya - wannan muhimmiyar alama ce ta anagrams.

Nemo wasula

Aiki mai sauƙi mai sauƙi wanda sau da yawa yakan zo cikin tambayoyi.

Zazzagewa

Kuna buƙatar rubuta aikin da ke ɗaukar kirtani azaman hujja kuma ya dawo da adadin wasulan da ke cikin kirtani.
Wasan wasalan sune "a", "e", "i", "o", "u".

Alal misali:

FindVwels('hello') // —> 2
nemo wasulan ('me yasa') // —> 0

yanke shawara

Ga mafi sauƙi zaɓi:

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
}

Yana da mahimmanci a kula da amfani da hanyar .includes () . Akwai don duka igiyoyi da tsararru. Ya kamata a yi amfani da shi don tantance ko tsararru ta ƙunshi ƙima. Wannan hanyar tana dawowa gaskiya ne idan tsararrun ta ƙunshi ƙayyadadden ƙima, kuma ƙarya idan ba ta yi ba.

Akwai gajeriyar maganin matsalar:

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

Wannan yana amfani da hanyar .match(), wanda ke ba ka damar aiwatar da ingantaccen bincike. Idan an sami magana ta yau da kullun azaman gardamar hanya a cikin ƙayyadadden kirtani, to ƙimar dawowa shine tsararrun haruffa masu dacewa. To, idan babu matches, to .match() ya dawo banza.

fibonacci

A classic aiki da za a iya samu a cikin tambayoyi a daban-daban matakan. Yana da kyau a tuna cewa jerin Fibonacci jerin lambobi ne inda kowane ɗayan na gaba shine jimlar na baya biyu. Don haka, lambobi goma na farko sun yi kama da haka: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Zazzagewa

Kuna buƙatar rubuta aikin da ke dawo da rikodin nth a cikin wani jeri, tare da n kasancewa lambar da aka wuce azaman hujja ga aikin.

fibonacci (3) // —> 2

Wannan aikin ya ƙunshi tafiya ta hanyar madauki adadin lokutan da aka ƙayyade a cikin gardama, mayar da darajar a matsayi mai dacewa. Wannan hanyar haifar da matsala tana buƙatar amfani da madaukai. Idan kun yi amfani da maimaitawa maimakon haka, yana iya faranta wa mai tambayoyin farantawa kuma ya ba ku wasu ƙarin maki.

yanke shawara

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

A cikin jerin sakamakon, lambobi biyu na farko suna kunshe a cikin jerin saboda kowane shigarwa a cikin jeri shine jimlar lambobi biyu da suka gabata. A farkon farko babu lambobi biyu da za a iya ɗauka don samun lamba ta gaba, don haka madauki ba zai iya samar da su ta atomatik ba. Amma, kamar yadda muka sani, lambobi biyu na farko koyaushe suna 0 da 1. Don haka, zaku iya fara tsarar sakamakon da hannu.

Amma game da sake dawowa, komai ya fi sauƙi kuma ya fi rikitarwa a lokaci guda:

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

Muna ci gaba da kiran fibonacci(), wucewa ƙarami da ƙarami lambobi azaman muhawara. Muna tsayawa lokacin da hujjar da aka wuce ta kasance 0 ko 1.

ƙarshe

Wataƙila, kun riga kun ci karo da ɗayan waɗannan ayyuka idan an yi muku tambayoyi don aikin gaba ko aikin haɓaka JavaScript (musamman idan a matakin ƙarami ne). Amma idan ba ku gamu da su ba, za su iya zama da amfani a nan gaba - aƙalla don ci gaban gaba ɗaya.

Skillbox yana ba da shawarar:

source: www.habr.com

Add a comment