5 ืžืฉื™ืžื•ืช ืจืื™ื•ืŸ ื˜ื™ืคื•ืกื™ื•ืช ืฉืœ JavaScript: ื ื™ืชื•ื— ื•ืคืชืจื•ื ื•ืช

5 ืžืฉื™ืžื•ืช ืจืื™ื•ืŸ ื˜ื™ืคื•ืกื™ื•ืช ืฉืœ JavaScript: ื ื™ืชื•ื— ื•ืคืชืจื•ื ื•ืช

ืžื”ืžืชืจื’ื: ืคืจืกื ืžืืžืจ ืขื‘ื•ืจืš ืžืจื™ื” ืื ื˜ื•ื ื™ื™ื˜ื” ืคืจื ื”, ืฉืžื“ื‘ืจืช ืขืœ ืžืฉื™ืžื•ืช JavaScript ื ืคื•ืฆื•ืช, ื”ืžื•ืฆืข ืœืจื•ื‘ ืœืžื•ืขืžื“ื™ื ืœืžืคืชื—ื™ื ื‘ืžื”ืœืš ืจืื™ื•ื ื•ืช. ื”ืžืืžืจ ื™ื”ื™ื” ืฉื™ืžื•ืฉื™, ืงื•ื“ื ื›ืœ, ืœืžืชื›ื ืชื™ื ืžืชื—ื™ืœื™ื.

ืจืื™ื•ื ื•ืช ื‘ื—ื‘ืจื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื ื›ื‘ืจ ื–ืžืŸ ืจื‘ ืฉื™ื—ืช ื”ืขื™ื™ืจื”. ื–ื” ืœื ืืžื•ืจ ืœื”ืคืชื™ืข - ืžืขื‘ืจ ืžื•ืฆืœื— ืฉืœ ืจืื™ื•ืŸ ื ื•ืชืŸ ืœืš ืืช ื”ื”ื–ื“ืžื ื•ืช ืœืงื‘ืœ ืขื‘ื•ื“ื” ื˜ื•ื‘ื”. ืื‘ืœ ื–ื” ืœื ื›ืœ ื›ืš ืคืฉื•ื˜, ืžื›ื™ื•ื•ืŸ ืฉืœืขืชื™ื ืงืจื•ื‘ื•ืช ื™ืฉ ืœืคืชื•ืจ ื‘ืขื™ื•ืช ืžื•ืจื›ื‘ื•ืช.

ื™ืชืจื” ืžื›ืš, ืœืจื•ื‘, ืจื•ื‘ ื”ืžืฉื™ืžื•ืช ื”ืœืœื• ืื™ื ืŸ ืงืฉื•ืจื•ืช ืœืขื‘ื•ื“ื” ืฉื™ื‘ืฆืข ื”ืคื•ื ื”, ืืš ืขื“ื™ื™ืŸ ื™ืฉ ืœืคืชื•ืจ ืื•ืชืŸ. ืœืคืขืžื™ื ืฆืจื™ืš ืœืขืฉื•ืช ืืช ื–ื” ืขืœ ื”ืœื•ื—, ื‘ืœื™ ืœื‘ื“ื•ืง ืขื ื’ื•ื’ืœ ืื• ื›ืœ ืžืงื•ืจ ืื—ืจ. ื›ืŸ, ื”ืžืฆื‘ ืžืฉืชื ื” ื‘ื”ื“ืจื’ื”, ื•ื—ืœืง ืžื”ื—ื‘ืจื•ืช ื ื•ื˜ืฉื•ืช ืจืื™ื•ื ื•ืช ื›ืืœื”, ืื‘ืœ ืžืขืกื™ืงื™ื ืจื‘ื™ื ืขื“ื™ื™ืŸ ื“ื‘ืงื™ื ื‘ืžืกื•ืจืช ื”ื–ื•. ืžืืžืจ ื–ื” ืžื•ืงื“ืฉ ืœื ื™ืชื•ื— ืžืฉื™ืžื•ืช JavaScript ื˜ื™ืคื•ืกื™ื•ืช ื”ืžืฉืžืฉื•ืช ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื›ืžืฉื™ืžื•ืช ืขื‘ื•ืจ ืžื—ืคืฉื™ ืขื‘ื•ื“ื”.

ืื ื• ืžื–ื›ื™ืจื™ื: ืœื›ืœ ืงื•ืจืื™ Habr - ื”ื ื—ื” ืฉืœ 10 ืจื•ื‘ืœ ื‘ืขืช ื”ืจืฉืžื” ืœื›ืœ ืงื•ืจืก Skillbox ื‘ืืžืฆืขื•ืช ืงื•ื“ ื”ื”ื˜ื‘ื” ืฉืœ Habr.

Skillbox ืžืžืœื™ืฆื”: ืงื•ืจืก ืžืขืฉื™ "Mobile Developer PRO".

ื”ืขื™ืงืจ ื”ื•ื ืœื”ืชื›ื•ื ืŸ ื”ื™ื˜ื‘ ืœืจืื™ื•ืŸ.

ื›ืŸ, ืœืคื ื™ ืฉื ืชื—ื™ืœ ืœื”ืกืชื›ืœ ืขืœ ื”ืžืฉื™ืžื•ืช, ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื›ืžื” ืขืฆื•ืช ื›ืœืœื™ื•ืช ืœื”ื›ื ื” ืœืจืื™ื•ืŸ.

ื”ืขื™ืงืจ ืœื”ื›ื™ืŸ ืžืจืืฉ. ื‘ื“ื•ืง ืขื“ ื›ืžื” ืืชื” ื–ื•ื›ืจ ืืœื’ื•ืจื™ืชืžื™ื ื•ืžื‘ื ื™ ื ืชื•ื ื™ื, ื•ืฉืคืจ ืืช ื”ื™ื“ืข ืฉืœืš ื‘ืชื—ื•ืžื™ื ืฉืืชื” ืœื ืžื›ื™ืจ ื™ื•ืชืจ ืžื“ื™. ื™ืฉื ืŸ ืคืœื˜ืคื•ืจืžื•ืช ืžืงื•ื•ื ื•ืช ืจื‘ื•ืช ืฉื™ื›ื•ืœื•ืช ืœืขื–ื•ืจ ืœืš ืœื”ืชื›ื•ื ืŸ ืœืจืื™ื•ื ื•ืช. ืื ื• ืžืžืœื™ืฆื™ื ื—ื ื•ื ื™ื, ืคืจืืžืค, ืจืื™ื•ืŸ.ื™ื• ะธ ืงื•ื“ ืกื™ื’ื ืœ.

ื›ื“ืื™ ืœืœืžื•ื“ ืœื”ื’ื™ื“ ืืช ื”ื”ื—ืœื˜ื” ื‘ืงื•ืœ ืจื. ืจืฆื•ื™ ืœืกืคืจ ืœืคื•ื ื™ื ืขืœ ืžื” ืฉืืชื ืขื•ืฉื™ื, ื•ืœื ืจืง ืœื›ืชื•ื‘ ืขืœ ื”ืœื•ื— (ืื• ืœื”ืงืœื™ื“ ืงื•ื“ ื‘ืžื—ืฉื‘, ื’ื ื‘ืฉืงื˜). ื‘ื“ืจืš ื–ื•, ืื ืืชื” ืขื•ืฉื” ื˜ืขื•ืช ื‘ืงื•ื“, ืื‘ืœ ื”ืคืชืจื•ืŸ ื”ื•ื ื‘ื“ืจืš ื›ืœืœ ื ื›ื•ืŸ, ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืœ ืืช ืกื™ื›ื•ื™ื™ ื”ื”ืฆืœื—ื” ืฉืœืš.

ืืชื” ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืืช ื”ื‘ืขื™ื” ืœืคื ื™ ืฉืืชื” ืžืชื—ื™ืœ ืœืคืชื•ืจ ืื•ืชื”. ื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื, ืืชื” ืขืฉื•ื™ ืœื”ื‘ื™ืŸ ืžืฉื™ืžื” ื‘ืฆื•ืจื” ืฉื˜ื—ื™ืช ื•ืื– ืœืœื›ืช ื‘ื“ืจืš ื”ืœื ื ื›ื•ื ื”. ืื•ืœื™ ื›ื“ืื™ ืœืฉืื•ืœ ื›ืžื” ืฉืืœื•ืช ื”ื‘ื”ืจื” ืœืžืจืื™ื™ืŸ.

ืืชื” ืฆืจื™ืš ืœื”ืชืืžืŸ ื‘ื›ืชื™ื‘ืช ืงื•ื“ ื‘ื™ื“, ืœื ื‘ืžื—ืฉื‘. ืงื•ืจื” ืฉื‘ืžื”ืœืš ืจืื™ื•ื ื•ืช ื ื•ืชื ื™ื ืœืžื•ืขืžื“ ืกืžืŸ ื•ืœื•ื—, ืฉื‘ื• ืื™ืŸ ืจืžื–ื™ื ืื• ืขื™ืฆื•ื‘ ืื•ื˜ื•ืžื˜ื™. ื›ืืฉืจ ืžื—ืคืฉื™ื ืคืชืจื•ืŸ, ื›ื“ืื™ ืœืจืฉื•ื ืืช ื”ืงื•ื“ ืฉืœื›ื ืขืœ ืคื™ืกืช ื ื™ื™ืจ ืื• ื™ืฉื™ืจื•ืช ืขืœ ื”ืœื•ื—. ืื ืชืฉืžื•ืจ ื”ื›ืœ ื‘ืจืืฉ, ืืชื” ืขืœื•ืœ ืœืฉื›ื•ื— ืžืฉื”ื• ื—ืฉื•ื‘.

ืžืฉื™ืžื•ืช ืชื‘ื ื™ืช ื‘-JavaScript

ื—ืœืง ืžื”ืžืฉื™ืžื•ืช ื”ืœืœื• ื›ื ืจืื” ื›ื‘ืจ ืžื•ื›ืจื•ืช ืœืš. ืื• ืฉื”ื™ื• ืœืš ืจืื™ื•ื ื•ืช ืฉื‘ื”ื ื”ื™ื™ืช ืฆืจื™ืš ืœืคืชื•ืจ ืžืฉื”ื• ื“ื•ืžื”, ืื• ืฉื”ืชืจื’ืœืช ืขืœื™ื”ื ืชื•ืš ื›ื“ื™ ืœื™ืžื•ื“ JavaScript. ื•ื‘ื›ืŸ, ืขื›ืฉื™ื• ื”ื’ื™ืข ื”ื–ืžืŸ ืœืคืชื•ืจ ืื•ืชื ืฉื•ื‘, ื•ืขื ื”ืกื‘ืจ ืžืคื•ืจื˜ ืขืœ ื”ืชื”ืœื™ืš.

ืคืœื™ื ื“ืจื•ื

ืคืœื™ื ื“ืจื•ื ื”ื•ื ืžื™ืœื”, ืžืฉืคื˜ ืื• ืจืฆืฃ ืฉืœ ืชื•ื•ื™ื ื”ื ืงืจืื™ื ื‘ื“ื™ื•ืง ืื•ืชื• ื”ื“ื‘ืจ ื”ืŸ ื‘ื›ื™ื•ื•ืŸ ื”ืจื’ื™ืœ ื•ื”ืŸ ื‘ื›ื™ื•ื•ืŸ ื”ื”ืคื•ืš. ืœื“ื•ื’ืžื”, "ืื ื”" ื”ื™ื ืคืœื™ื ื“ืจื•ื, ืื‘ืœ "ืฉื•ืœื—ืŸ" ื•"ื’'ื•ืŸ" ืœื.

ื‘ื™ืžื•ื™

ื ืชื•ืŸ ืžื—ืจื•ื–ืช; ืืชื” ืฆืจื™ืš ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ืฉืžืืคืฉืจืช ืœืš ืœื”ื—ื–ื™ืจ true ืื ื”ืžื—ืจื•ื–ืช ื”ื™ื ืคืœื™ื ื“ืจื•ื, ื•-false ืื ืœื. ื‘ืžืงืจื” ื–ื”, ืืชื” ืฆืจื™ืš ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืจื•ื•ื—ื™ื ื•ืกื™ืžื ื™ ืคื™ืกื•ืง.

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() (ืกืคืจื™ื™ืช ืžื—ืจื•ื–ื•ืช). ืœืื—ืจ ืžื›ืŸ ื ื”ืคื•ืš ืืช ื”ืžืขืจืš ื‘ืืžืฆืขื•ืช .reverse() (ืกืคืจื™ื™ืช ืžืขืจืš). ื”ืฉืœื‘ ื”ืื—ืจื•ืŸ ื”ื•ื ืœื”ืžื™ืจ ืืช ื”ืžืขืจืš ื”ื”ืคื•ืš ืœืžื—ืจื•ื–ืช ื‘ืืžืฆืขื•ืช .join() (ืกืคืจื™ื™ืช ืžืขืจืš).

ื›ืขืช ื›ืœ ืžื” ืฉืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ื”ื•ื ืœื”ืฉื•ื•ืช ืืช ื”ืžื—ืจื•ื–ืช "ื”ืคื•ื›ื”" ืœืžื—ืจื•ื–ืช ื”ืžืงื•ืจื™ืช, ื•ืœื”ื—ื–ื™ืจ ืืช ื”ืชื•ืฆืื” ืืžืช ืื• ืœื ื ื›ื•ื ื”.

FizzBuzz

ืื—ืช ื”ืžืฉื™ืžื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ื‘ื™ื•ืชืจ ื‘ืจืื™ื•ื ื•ืช.

ื‘ื™ืžื•ื™

ืขืœื™ืš ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ืฉืžื“ืคื™ืกื” ืžืกืคืจื™ื ืž-1 ืขื“ n ืœืงื•ื ืกื•ืœื”, ื›ืืฉืจ n ื”ื•ื ืžืกืคืจ ืฉืœื ืฉื”ืคื•ื ืงืฆื™ื” ืœื•ืงื—ืช ื›ืคืจืžื˜ืจ, ื‘ืชื ืื™ื ื”ื‘ืื™ื:

  • ืคืœื˜ ืชื•ืกืก ื‘ืžืงื•ื ื›ืคื•ืœื•ืช ืฉืœ 3;
  • ืคืœื˜ ื‘ืื– ื‘ืžืงื•ื ืžืกืคืจื™ื ืฉื”ื ื›ืคื•ืœื•ืช ืฉืœ 5;
  • ืคืœื˜ fizzbuzz ื‘ืžืงื•ื ืžืกืคืจื™ื ืฉื”ื ื›ืคื•ืœื•ืช ืฉืœ 3 ื•-5.

ื“ื•ื’ืžื”

Fizzbuzz(5)

ืชื•ืฆืื”

// 1
// 2
// ืคื™ื–
// 4
//ื–ึดืžื–ื•ึผื

ื‘ื•ืื• ื ื ืชื— ืืช ื”ืžืฉื™ืžื”

ื”ืขื™ืงืจ ื›ืืŸ ื”ื•ื ื“ืจืš ืœืžืฆื•ื ืžืจื•ื‘ื™ื ื‘ืืžืฆืขื•ืช JavaScript. ื ื™ืชืŸ ืœื™ื™ืฉื ืื•ืชื• ื‘ืืžืฆืขื•ืช ืื•ืคืจื˜ื•ืจ ื”ืžื•ื“ื•ืœื•ืก ืื• ื”ืฉืืจ - %, ื”ืžืืคืฉืจ ืœืš ืœื”ืฆื™ื’ ืืช ื”ืฉืืจ ื‘ืขืช ื—ืœื•ืงืช ืฉื ื™ ืžืกืคืจื™ื. ืื ื”ื™ืชืจื” ื”ื™ื 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: ืžืชื—ื™ืœื™ื ื‘ืชื ืื™ ื›ืคื•ืœ (&&) ื•ืžืกื™ื™ืžื™ื ื‘ืžืงืจื” ื‘ื• ืœื ื ื™ืชืŸ ื”ื™ื” ืœืžืฆื•ื ืžืกืคืจื™ื ืžืจื•ื‘ื™ื. ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ืžื›ืกื™ื ืืช ื›ืœ ื”ืืคืฉืจื•ื™ื•ืช.

ืึฒื ึทื’ึฐืจึทืžึธื”

ื–ื”ื• ื”ืฉื ืœืžื™ืœื” ื”ืžื›ื™ืœื” ืืช ื›ืœ ื”ืื•ืชื™ื•ืช ืฉืœ ืžื™ืœื” ืื—ืจืช ื‘ืื•ืชื• ืžืกืคืจ, ืืš ื‘ืกื“ืจ ืฉื•ื ื”.

ื‘ื™ืžื•ื™

ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ืฉื‘ื•ื“ืงืช ืื ืฉืชื™ ืžื—ืจื•ื–ื•ืช ื”ืŸ ืื ื’ืจืžื•ืช, ื•ื”ืžืงืจื” ืœื ืžืฉื ื”. ืจืง ืชื•ื•ื™ื ื ืกืคืจื™ื; ืจื•ื•ื—ื™ื ืื• ืกื™ืžื ื™ ืคื™ืกื•ืง ืื™ื ื ื ืœืงื—ื™ื ื‘ื—ืฉื‘ื•ืŸ.

anagram('finder', 'ื—ื‘ืจ') -> ื ื›ื•ืŸ
anagram('ืฉืœื•ื', 'ื‘ื™ื™') โ€”> ืฉืงืจ

ื‘ื•ืื• ื ื ืชื— ืืช ื”ืžืฉื™ืžื”

ื”ื“ื‘ืจ ื”ื—ืฉื•ื‘ ืฉื™ืฉ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ื›ืืŸ ื”ื•ื ืฉืฆืจื™ืš ืœื‘ื“ื•ืง ื›ืœ ืื•ืช ื‘ืฉืชื™ ืฉื•ืจื•ืช ื”ืงืœื˜ ื•ืืช ืžืกืคืจืŸ ื‘ื›ืœ ืฉื•ืจื”.

ืžื•ืฆื โ€”> ื•: ื—ื‘ืจ ืื—ื“ โ€”> ื•: 1
i: 1 r: 1
n: 1 i: 1
ื“: 1 ื”: 1
ื”: 1 n: 1
r: 1 ื“: 1

ื›ื“ื™ ืœืื—ืกืŸ ื ืชื•ื ื™ ืื ื’ืจืžื”, ืขืœื™ืš ืœื‘ื—ื•ืจ ืžื‘ื ื” ื›ื’ื•ืŸ ืื•ื‘ื™ื™ืงื˜ JavaScript ืžื™ืœื•ืœื™. ื”ืžืคืชื— ื‘ืžืงืจื” ื–ื” ื”ื•ื ืื•ืคื™ ื”ืื•ืช, ื”ืขืจืš ื”ื•ื ืžืกืคืจ ื”ื—ื–ืจื•ืช ืฉืœื” ื‘ืฉื•ืจื” ื”ื ื•ื›ื—ื™ืช.

ื™ืฉื ื ืชื ืื™ื ื ื•ืกืคื™ื:

  • ืืชื” ืฆืจื™ืš ืœื•ื•ื“ื ืฉื”ืžืงืจื” ืฉืœ ืื•ืชื™ื•ืช ืœื ื ืœืงื— ื‘ื—ืฉื‘ื•ืŸ ื‘ืขืช โ€‹โ€‹ื”ื”ืฉื•ื•ืื”. ืื ื—ื ื• ืคืฉื•ื˜ ืžืžื™ืจื™ื ืืช ืฉืชื™ ื”ืžื—ืจื•ื–ื•ืช ืœืื•ืชื™ื•ืช ืงื˜ื ื•ืช ืื• ื’ื“ื•ืœื•ืช.
  • ืื ื• ืœื ื›ื•ืœืœื™ื ืืช ื›ืœ ื”ืชื•ื•ื™ื ืฉืื™ื ื ืžื”ื”ืฉื•ื•ืื”. ื”ื›ื™ ื˜ื•ื‘ ืœืขื‘ื•ื“ ืื™ืชื• ื‘ื™ื˜ื•ื™ื™ื ืจื’ื•ืœืจื™ื™ื.

ื”ื—ืœื˜ื”

// 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".

ืœื“ื•ื’ืžื”:

findVwels('hello') // โ€”> 2
findVwels('why') // โ€”> 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() . ื–ื” ื–ืžื™ืŸ ื’ื ืขื‘ื•ืจ ืžื—ืจื•ื–ื•ืช ื•ื’ื ืขื‘ื•ืจ ืžืขืจื›ื™ื. ื™ืฉ ืœื”ืฉืชืžืฉ ื‘ื• ื›ื“ื™ ืœืงื‘ื•ืข ืื ืžืขืจืš ืžื›ื™ืœ ืขืจืš ืžืกื•ื™ื. ืฉื™ื˜ื” ื–ื• ืžื—ื–ื™ืจื” true ืื ื”ืžืขืจืš ืžื›ื™ืœ ืืช ื”ืขืจืš ืฉืฆื•ื™ืŸ, ื•-false ืื ืœื.

ื™ืฉ ืคืชืจื•ืŸ ืงืฆืจ ื™ื•ืชืจ ืœื‘ืขื™ื”:

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

ื–ื” ืžืฉืชืžืฉ ื‘ืฉื™ื˜ืช .match(), ื”ืžืืคืฉืจืช ืœืš ืœื™ื™ืฉื ื—ื™ืคื•ืฉ ื™ืขื™ืœ. ืื ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™ ื›ืืจื’ื•ืžื ื˜ ืžืชื•ื“ื” ื ืžืฆื ื‘ืชื•ืš ื”ืžื—ืจื•ื–ืช ืฉืฆื•ื™ื ื”, ืื–ื™ ืขืจืš ื”ื”ื—ื–ืจื” ื”ื•ื ืžืขืจืš ืฉืœ ืชื•ื•ื™ื ืชื•ืืžื™ื. ื•ื‘ื›ืŸ, ืื ืื™ืŸ ื”ืชืืžื•ืช, ืื– .match() ืžื—ื–ื™ืจื” null.

ืคื™ื‘ื•ื ืืฆ'ื™

ืžืฉื™ืžื” ืงืœืืกื™ืช ืฉื ื™ืชืŸ ืœืžืฆื•ื ื‘ืจืื™ื•ื ื•ืช ื‘ืจืžื•ืช ืฉื•ื ื•ืช. ื›ื“ืื™ ืœื–ื›ื•ืจ ืฉืจืฆืฃ ืคื™ื‘ื•ื ืืฆ'ื™ ื”ื•ื ืกื“ืจื” ืฉืœ ืžืกืคืจื™ื ื›ืืฉืจ ื›ืœ ืื—ื“ ืœืื—ืจ ืžื›ืŸ ื”ื•ื ื”ืกื›ื•ื ืฉืœ ื”ืฉื ื™ื™ื ื”ืงื•ื“ืžื™ื. ืื–, ืขืฉืจืช ื”ืžืกืคืจื™ื ื”ืจืืฉื•ื ื™ื ื ืจืื™ื ื›ืš: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

ื‘ื™ืžื•ื™

ืฆืจื™ืš ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ืฉืžื—ื–ื™ืจื” ืืช ื”ืจืฉื•ืžื” ื”-n ื‘ืจืฆืฃ ืžืกื•ื™ื, ื›ืืฉืจ 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)
}

ืื ื—ื ื• ืžืžืฉื™ื›ื™ื ืœืงืจื•ื ืœ-fibonacci(), ื•ืžืขื‘ื™ืจื™ื ืžืกืคืจื™ื ืงื˜ื ื™ื ื™ื•ืชืจ ื›ืืจื’ื•ืžื ื˜ื™ื. ืื ื• ืขื•ืฆืจื™ื ื›ืืฉืจ ื”ืืจื’ื•ืžื ื˜ ืฉืขื‘ืจ ื”ื•ื 0 ืื• 1.

ืคืœื˜

ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื›ื‘ืจ ื ืชืงืœืช ื‘ื›ืœ ืื—ืช ืžื”ืžืฉื™ืžื•ืช ื”ืœืœื• ืื ื”ืชืจืื™ื™ื ืช ืœืขื‘ื•ื“ืช ืžืคืชื— ื—ื–ื™ืชื™ืช ืื• JavaScript (ื‘ืžื™ื•ื—ื“ ืื ื–ื” ื‘ืจืžื” ื”ื–ื•ื˜ืจ). ืื‘ืœ ืื ืœื ื ืชืงืœืชื ื‘ื”ื, ื”ื ืขืฉื•ื™ื™ื ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ื™ื ื‘ืขืชื™ื“ - ืœืคื—ื•ืช ืœืคื™ืชื•ื— ื›ืœืœื™.

Skillbox ืžืžืœื™ืฆื”:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”