د جاواسکریپټ مرکې 5 عادي دندې: ​​تحلیل او حلونه

د جاواسکریپټ مرکې 5 عادي دندې: ​​تحلیل او حلونه

له ژباړن څخه: ستاسو لپاره یوه مقاله خپره کړه ماریا انتونیټا پرنا، چې د عام جاواسکریپټ دندو په اړه خبرې کوي، ډیری وختونه د مرکې په جریان کې د پراختیا غوښتونکي غوښتونکي ته وړاندیز کیږي. مقاله به ګټوره وي، لومړی د نوي پروګرام کونکو لپاره.

په تخنیکي شرکتونو کې مرکې له اوږدې مودې راهیسې د ښار خبرې وې. دا باید د حیرانتیا وړ نه وي - په بریالیتوب سره د مرکې تیریدل تاسو ته فرصت درکوي چې ښه دنده ترلاسه کړئ. مګر دا دومره ساده نه ده، ځکه چې پیچلې ستونزې اکثرا باید حل شي.

سربیره پردې، ډیری وختونه، ډیری دا دندې د هغه کار سره تړاو نلري چې غوښتونکی به یې ترسره کړي، مګر دوی لاهم حل کولو ته اړتیا لري. ځینې ​​​​وختونه تاسو باید دا په بورډ کې ترسره کړئ، پرته له دې چې د ګوګل یا کومې بلې سرچینې سره وګورئ. هو، وضعیت په تدریجي ډول بدلیږي، او ځینې شرکتونه دا ډول مرکې پریږدي، مګر ډیری کارګمارونکي لاهم دا دود ته غاړه ایږدي. دا مقاله د عام جاواسکریپټ دندو تحلیل ته وقف شوې ده چې ډیری وختونه د کار غوښتونکو لپاره د دندو په توګه کارول کیږي.

موږ یادونه کوو: د ټولو هابر لوستونکو لپاره - د 10 روبل تخفیف کله چې د هابر پرومو کوډ په کارولو سره د مهارت بکس کوم کورس کې نوم لیکنه وکړئ.

Skillbox وړاندیز کوي: عملي کورس "د ګرځنده پرمخ وړونکي PRO".

اصلي شی ستاسو د مرکې لپاره په بشپړه توګه چمتو کول دي.

هو، مخکې لدې چې موږ دندو په لټه کې شو ، راځئ چې د مرکې چمتو کولو ځینې عمومي لارښوونې وګورو.

اصلي شی دا ده چې مخکې چمتو شي. ازموینه وکړئ چې تاسو د الګوریتمونو او ډیټا جوړښتونو څومره ښه په یاد لرئ، او په هغو ساحو کې خپله پوهه ښه کړئ چې تاسو یې نه پیژنئ. ډیری آنلاین پلیټ فارمونه شتون لري چې کولی شي تاسو سره د مرکو لپاره چمتو کولو کې مرسته وکړي. موږ مشوره ورکوو geeksforgeeks, پرمپ, Interviewing.io и کوډسینال.

دا د زده کړې ارزښت لري چې پریکړه په لوړ غږ ووایی. دا مشوره ورکول کیږي چې غوښتونکو ته د هغه څه په اړه ووایاست چې تاسو یې کوئ، او نه یوازې په تخته کې ولیکئ (یا په کمپیوټر کې کوډ ټایپ کړئ، په خاموشۍ سره). په دې توګه، که تاسو په کوډ کې تېروتنه وکړئ، مګر حل عموما سم وي، تاسو کولی شئ د بریالیتوب امکانات زیات کړئ.

تاسو اړتیا لرئ مخکې له دې چې تاسو یې د حل کولو پیل پیل کړئ ستونزه درک کړئ. په ځینو مواردو کې، تاسو ممکن یو کار په سطحي توګه درک کړئ او بیا په غلطه لاره لاړ شئ. دا ممکن د مرکه کونکي څخه یو څو روښانه پوښتنې وپوښتل شي.

تاسو اړتیا لرئ د لاس په واسطه د لیکلو کوډ تمرین کړئ، نه په کمپیوټر کې. داسې پیښیږي چې د مرکې په جریان کې غوښتونکي ته مارکر او سپینه تخته ورکړل شي ، چیرې چې هیڅ اشاره یا اتوماتیک فارمیټ شتون نلري. کله چې د حل په لټه کې یاست، نو دا ارزښت لري چې خپل کوډ د کاغذ په یوه ټوټه یا مستقیم تخته کې ولیکئ. که تاسو هرڅه په خپل سر کې وساتئ، تاسو ممکن یو مهم هیر کړئ.

په جاواسکریپټ کې د ټیمپلیټ دندې

د دې کارونو څخه ځینې شاید تاسو ته دمخه پیژندل شوي وي. تاسو یا هم مرکې درلودې چیرې چې تاسو باید ورته یو څه حل کړئ ، یا د جاوا سکریپټ زده کولو پرمهال په دوی باندې تمرین وکړئ. ښه، اوس دا وخت دی چې دوی بیا حل کړئ، او د پروسې تفصيلي توضیح سره.

پالینډروم

پالینډروم یوه کلمه، جمله یا د حروفونو ترتیب دی چې په عادي او مخالف لوري کې په ورته ډول لوستل کیږي. د مثال په توګه، "انا" یو پالینډروم دی، مګر "میز" او "جان" ندي.

سټینګ کول

یو تار ورکول؛ تاسو اړتیا لرئ یو فنکشن ولیکئ چې تاسو ته اجازه درکوي ریښتیا بیرته راشئ که چیرې تار یو پالینډروم وي ، او که غلط وي. په دې حالت کې، تاسو اړتیا لرئ چې په حساب کې ځایونه او د ټکي نښه نښه کړئ.

palindrome('racecar') === ریښتیا
palindrome('table') === غلط

راځئ چې دنده تحلیل کړو

دلته اصلي مفکوره د تار بیرته راګرځول دي. که "ریورس" تار په بشپړ ډول اصلي سره ورته وي، نو موږ یو پالینډروم ترلاسه کړی او فعالیت باید ریښتیا راشي. که نه، دروغ.

پریکړه

دلته هغه کوډ دی چې د پالینډروم حل کوي.

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

لومړی ګام دا دی چې د ان پټ سټینګ کې حروف په کوچني کې بدل کړئ. دا یو تضمین دی چې برنامه به پخپله کرکټرونه پرتله کړي ، نه قضیه یا بل څه.

دوهم ګام د کرښې بیرته راګرځول دي. دا کار کول ستونزمن نه دي: تاسو اړتیا لرئ دا د .split() میتود (String کتابتون) په کارولو سره په صف کې بدل کړئ. بیا موږ د .reverse() (Array کتابتون) په کارولو سره سرې بیرته راګرځوو. وروستی ګام دا دی چې د .join() (Array کتابتون) په کارولو سره ریورس سري په تار کې بدل کړئ.

اوس ټول هغه څه چې تاسو یې کولو ته اړتیا لرئ د اصلي تار سره د "ریورس" تار پرتله کول دي، پایله یې ریښتیا یا غلطه راګرځوي.

FizzBuzz

په مرکو کې یو له خورا مشهور کارونو څخه.

سټینګ کول

تاسو اړتیا لرئ یو فنکشن ولیکئ چې شمیرې له 1 څخه تر n پورې کنسول ته چاپ کړي ، چیرې چې n یو بشپړ دی چې فنکشن د لاندې شرایطو سره د پیرامیټر په توګه اخلي:

  • د 3 د ضرب پر ځای فیز تولید کړئ؛
  • د هغو شمیرو پر ځای چې د 5 ضربونه دي د بز پیدا کول؛
  • د عددونو پر ځای د فیزبز محصول چې د 3 او 5 دواړه ضربونه دي.

بېلګه:

Fizzbuzz(5)

نتيجه

// ۳۴
// ۳۴
// فیز
// ۳۴
//buzz

راځئ چې دنده تحلیل کړو

دلته اصلي شی د جاواسکریپټ په کارولو سره د ضربونو موندلو یوه لاره ده. دا د ماډلوس آپریټر یا پاتې -٪ په کارولو سره پلي کیدی شي ، کوم چې تاسو ته اجازه درکوي پاتې د دوه شمیرو ویشلو پرمهال وښیې. که پاتې 0 وي، دا پدې مانا ده چې لومړۍ شمیره د دویمې ګڼې دي.

12% 5 // 2 -> 12 د 5 ضرب ندی
12% 3 // 0 -> 12 د 3 ډیری دی

نو که تاسو 12 په 5 سره وویشئ، تاسو 2 د پاتې 2 سره ترلاسه کوئ. که تاسو 12 په 3 ویشئ، تاسو 4 د پاتې 0 سره ترلاسه کوئ. په لومړي حالت کې، 12 د 5 ضرب نه دی، په دویمه برخه کې. ، 12 د 3 ضرب دی.

پریکړه

غوره حل به لاندې کوډ وي:

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

فنکشن د مشروط بیاناتو په کارولو سره اړین چیکونه ترسره کوي او د کارونکي لخوا اړین پایله تولیدوي. په ستونزه کې، د if...else بیاناتو ترتیب ته پام کول ارزښت لري: د دوه اړخیز حالت (&&) سره پیل کړئ او په هغه قضیه کې پای ته ورسیږئ چیرې چې ډیری شمیرې نشي موندلی. د پایلې په توګه، موږ ټول انتخابونه پوښلي.

انګرام

دا د یوې کلمې نوم دی چې په ورته شمیر کې د بلې کلمې ټول توري لري، مګر په بل ترتیب کې.

سټینګ کول

موږ اړتیا لرو چې یو فنکشن ولیکو چې دا وګوري چې آیا دوه تارونه انګرامونه دي، او قضیه مهمه نده. یوازې کرکټرونه شمیرل کیږي؛ ځایونه یا د ټکي نښې په پام کې نه نیول کیږي.

انگرام ('موندونکی'، 'ملګری') -> ریښتیا
انګرام ('سلام'، 'بای') -> غلط

راځئ چې دنده تحلیل کړو

دلته په پام کې نیولو مهم شی دا دی چې تاسو اړتیا لرئ هر لیک په دوه ان پټ لینونو کې وګورئ او په هره کرښه کې د دوی شمیره.

موندونکی —> f: 1 ملګری —> f: 1
i: 1 r: 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1

د انګرام ډیټا ذخیره کولو لپاره، تاسو باید یو جوړښت غوره کړئ لکه د جاواسکریپټ اعتراض لفظي. په دې حالت کې کلیدي د لیک کرکټر دی، ارزښت په اوسني کرښه کې د هغې د تکرار شمیر دی.

نور شرایط شتون لري:

  • تاسو اړتیا لرئ ډاډ ترلاسه کړئ چې د پرتله کولو پرمهال د لیکونو قضیه په پام کې نه نیول کیږي. موږ په ساده ډول دواړه تارونه ښکته یا پورتنۍ قضیې ته واړوو.
  • موږ ټول غیر کرکټرونه د پرتله کولو څخه لرې کوو. د کار کولو لپاره غوره منظم څرګندونې.

پریکړه

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

استعمال ته پام وکړئ Object.keys() په پورته برخه کې. دا طریقه یو صف بیرته راګرځوي چې نومونه یا کیلي لري په ورته ترتیب کې چې دوی په اعتراض کې ښکاري. په دې حالت کې سریزه به داسې وي:

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

په دې توګه موږ د بلک لوپ کولو پرته د اعتراض ملکیتونه ترلاسه کوو. په یوه ستونزه کې، تاسو کولی شئ دا طریقه د .length ملکیت سره وکاروئ ترڅو وګورئ چې آیا دواړه تارونه ورته حروفونه لري - دا د انګرامونو یوه مهمه ځانګړتیا ده.

د غږونو لټون وکړئ

یو خورا ساده کار چې ډیری وختونه په مرکو کې راځي.

سټینګ کول

تاسو اړتیا لرئ داسې فنکشن ولیکئ چې تار د دلیل په توګه اخلي او د تورو شمیره بیرته راولي چې په تار کې شتون لري.
واولونه "a"، "e"، "i"، "o"، "u" دي.

بېلګه:

findVowels('Hello') // —> 2
موندلو غږونه ('ولې') // —> 0

پریکړه

دلته ترټولو ساده اختیار دی:

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
}

دا مهمه ده چې د .includes() میتود کارولو ته پاملرنه وکړئ. دا د دواړو تارونو او صفونو لپاره شتون لري. دا باید د دې معلومولو لپاره وکارول شي چې ایا یو سري یو ټاکلی ارزښت لري. دا طریقه ریښتیا راګرځي که چیرې سرې ټاکل شوي ارزښت ولري، او غلط که دا نه وي.

د ستونزې لنډ حل شتون لري:

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

دا د .match() میتود کاروي، کوم چې تاسو ته د اغیزمن لټون پلي کولو اجازه درکوي. که چیرې د میتود دلیل په توګه منظم بیان په ټاکل شوي تار کې وموندل شي ، نو د بیرته راستنیدو ارزښت د ورته حروفونو لړۍ ده. ښه، که چیرې هیڅ میچ شتون ونلري، نو .match() بیرته راستنیږي.

fibonacci

یو کلاسیک دنده چې په مختلفو کچو کې په مرکو کې موندل کیدی شي. د یادولو وړ ده چې د فیبوناکي ترتیب د شمیرو لړۍ ده چیرې چې هر یو ورپسې د تیرو دوه مجموعه ده. نو، لومړنۍ لس شمیرې داسې ښکاري: 0، 1، 1، 2، 3، 5، 8، 13، 21، 34.

سټینګ کول

تاسو اړتیا لرئ یو فنکشن ولیکئ چې په یو ځانګړي ترتیب کې nth ریکارډ بیرته راولي، د n هغه شمیره ده چې فنکشن ته د دلیل په توګه لیږدول کیږي.

fibonacci(3) // —> 2

پدې کار کې د لوپ له لارې تګ کول شامل دي په دلیل کې ټاکل شوي څو ځله ، په مناسب موقعیت کې ارزښت بیرته راګرځول. د ستونزې د وړاندې کولو دا طریقه د لوپونو کارولو ته اړتیا لري. که تاسو د دې پرځای تکرار کاروئ، دا ممکن مرکه کوونکی خوښ کړي او تاسو ته یو څو اضافي ټکي درکړي.

پریکړه

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

د پایلو په صف کې، لومړی دوه شمیرې په لړۍ کې شاملې دي ځکه چې په ترتیب کې هر ننوتل د تیرو دوو شمیرو مجموعه ده. په پیل کې هیڅ دوه شمیرې شتون نلري چې د راتلونکي شمیرو ترلاسه کولو لپاره اخیستل کیدی شي ، نو لوپ نشي کولی دوی په اوتومات ډول تولید کړي. مګر، لکه څنګه چې موږ پوهیږو، لومړی دوه شمیرې تل 0 او 1 وي. نو تاسو کولی شئ د پایلو لړۍ په لاسي ډول پیل کړئ.

لکه څنګه چې د تکرار لپاره، هرڅه په ورته وخت کې ساده او ډیر پیچلي دي:

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

موږ فیبوناکي () ته زنګ وهو، د دلیلونو په توګه کوچنۍ او کوچنۍ شمیرې تیریږي. موږ ودروو کله چې منظور شوی دلیل 0 یا 1 وي.

پایلې

ډیری احتمال، تاسو دمخه د دې دندو سره مخ شوي یاست که چیرې تاسو د فرنټ انډ یا جاواسکریپټ پراختیا کونکي دندې لپاره مرکه کړې وي (په ځانګړي توګه که دا په ځوانه کچه وي). مګر که تاسو دوی ته نه یاست راغلی، دوی ممکن په راتلونکي کې ګټور وي - لږترلږه د عمومي پراختیا لپاره.

Skillbox وړاندیز کوي:

سرچینه: www.habr.com

Add a comment