Практичні завдання на співбесіду: CORE JS part 2
В цій статті представлено декілька цікавих задач по CORE JS, які можуть бути використані як підготовка до співбесіди.
1. Що виведеться в консоль?
let a, b, c = [1, 2, 3, 4, 5]
console.log(a, c);
-
Відповідьundefined, [1, 2, 3, 4, 5]
2. Чому дорівнює foo.x?
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
-
Відповідьundefined
3. Що повернуть дані порівняння?
NaN === NaN;
Number.NaN === NaN;
isNaN(NaN);
isNaN(Number.NaN);
-
Відповідь
- false
- false
- true
- true
Оператори порівняння (== і ===) не можуть бути використані для перевірки значення з NaN, натомість слід використовувати функції Number.isNaN() або isNaN().
3. Що поверне функція?
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
-
Відповідь2
4. Напишіть свою реалізацію методу масиву map
-
Відповідь
Array.prototype.mapCustom = function(callback, context) { const newArr = []; const _this = context || this; for (let i = 0; i < _this.length; i++) { newArr.push(callback.call(this, _this[i])); } return newArr; } let arr1 = [1, 2, 3]; console.log(arr1.mapCustom((el) => el*3)); console.log(arr1.map((el) => el*2));
5. Напишіть функцію, яка перевіряє чи слово являється паліндромом
Паліндром — слово або словосполучення, що однаково читається в обох напрямках (зліва направо та справа наліво). Наприклад: дід, зараз, ротатор і т.д.
-
Відповідь
const isPalindrom = (str) => { str = str.replace(/\s/g, '').toLowerCase(); return str === str.split('').reverse().join(''); } console.log(isPalindrom('abcd')); console.log(isPalindrom('dad')) console.log(isPalindrom('Never odd or even'));
6. Напишіть функцію, яка перевіряє чи слова являються анаграмою
Анаграма — переставлення літер у слові, завдяки чому утворюється нове значення, прочитуване у зворотному напрямку (тік — кіт, мука — кума, літо — тіло).
-
Відповідь
const isAnagram = (str1, str2) => { if (!str1 || !str2 || str1.length !== str2.length) { return false; } const arr1 = str1.toLowerCase().split(); const arr2 = str2.toLowerCase().split(); return arr1.some(el => !arr2.includes(el)); } console.log(isAnagram('abcd', 'sdfdsf')); console.log(isAnagram('lito', 'tilo'));
7. Напишіть функцію, яка знайде всіх користувачів онлайн у штаті Michigan
const users = [
{id: 'id1a', name: 'Livvi Doe', location: 'Michigan'},
{id: 'id2b', name: 'Jane Doe', location: 'Alabama'},
{id: 'id3c', name: 'Sean Doe', location: 'Michigan'},
{id: 'id4d', name: 'Kate Doe', location: 'California'},
];
const online = [
{id: 'id1a', isOnline: true},
{id: 'id3c', isOnline: true},
{id: 'id5e', isOnline: false},
{id: 'id4d', isOnline: true}
];
-
Відповідь
function getUsers(users, online, location) { const onlineOnly = []; online.forEach((user) => user.isOnline && onlineOnly.push(user.id)); return users.filter((user) => { return user.location === location && onlineOnly.includes(user.id); }); } console.log(getUsers(users, online, 'Michigan'));
8. Напишіть функцію, що створить шахову дошку в консолі
В результаті ми маємо отримати решітку 8х8, в якій символи # будуть чергуватися з пробілами так, щоб утворити шахову дошку:
#_#_#_#_
_#_#_#_#
#_#_#_#_
_#_#_#_#
-
Відповідь
const slash = '#'; const space = ' '; function createBoard(x, y) { let result = ''; let row = true; for (var i = 0; i < y; i++) { for (var j = 0; j < x; j++) { result += (j+row) % 2 == 0 ? space : slash; } console.log(result); result=''; row = !row; } } createBoard(8,8);
9. Напишіть функцію, яка виведе n-ний член ряду Фібоначчі
-
Відповідь
function fibonacci(n) { if (n === 0 || n === 1) return n; else return fibonacci(n - 1) + fibonacci(n - 2); }
Для покращення функції можна використовуючи мемоізацію, про що детальніше описано в статті Реалізація мемоізації в JavaScript.
Пишіть ваші варіанти відповідей в коментарях, а також підтримайте ЗСУ, щоб наблизити нашу перемогу. Якщо ви ще не ознайомились зі статтею Практичні завдання на співбесіду: CORE JS (part 1), то поспішіть, там ще багато цікавих задач.