[День 8] Опанування масивів: важливі питання для співбесід, які повинен знати кожен розробник

У нашій попередній статті ми розглянули різноманітні методи для роботи з масивами (arrays) у JavaScript. Проте масиви залишаються однією з найулюбленіших тем для інтерв’юерів — і це не просто так. Протягом багатьох років вони використовуються для оцінки навичок вирішення задач та глибини розуміння розробників.

pic

Чому масиви такі популярні на співбесідах?

Відповідь полягає у їхній універсальності. Масиви разом з об’єктами (objects) є базовими структурами даних, з якими розробники працюють протягом всієї своєї кар’єри. Незважаючи на свою простоту, складність, яку вони можуть створити при вирішенні реальних задач, робить їх цікавою та складною темою.

Щоб допомогти вам підготуватися до таких викликів, я зібрав список найчастіших питань на тему масивів під час співбесід. Вирішення цих питань не лише зміцнить ваші навички вирішення задач, але й допоможе краще зрозуміти JavaScript.

У цій статті ми зосередимося на масивах, закладаючи основу для наступної теми: об’єкти в JavaScript. Спочатку опанувавши масиви, ви значно полегшите перехід до об’єктів.

Давайте розглянемо найпоширеніші питання щодо масивів і обговоримо, чому вони важливі, а також підходи до їх вирішення.

Питання 1

let arr = [1, 2, 3, 4, 5, -6, 7];  
arr.length = 0;  
console.log(arr); // Output : []  

/*  
Причина: Встановлення властивості length масиву на менше значення обрізає масив, видаляючи елементи за межами нової довжини.  
Наприклад, arr.length = 2; зменшить масив до [1, 2], і arr.length стане рівним 2.  
*/

Питання 2

const arr=[1,,2];  
console.log(arr[1]);// undefined  
console.log(arr); // [1, <1 empty item>, 2]

Питання 3

let arr = [10, 20, 30, 40, 50];  
let removed = arr.splice(2, 2, 'a', 'b');  
console.log(arr); // [10,20,a,b,50]  
console.log(removed); // [30,40]

Питання 4

const arr = [10, 12, 15, 21];  
for (var i = 0; i < arr.length; i++) {  
 setTimeout(function() {  
 console.log('Index: ' + i + ', element: ' + arr[i]);  
 }, 3000);  
}

Результат

Index: 4, element: undefined  
Index: 4, element: undefined  
Index: 4, element: undefined  
Index: 4, element: undefined

Функція setTimeout створює замикання (closure), яке захоплює змінну i. Оскільки var має функціональну область видимості, до моменту виконання колбеків після 3 секунд цикл вже завершився, і i дорівнює 4. Тому кожен колбек виводить Index: 4, element: undefined, оскільки arr[4] є undefined. Щоб це виправити, використовуйте let замість var для створення блочної області видимості для i, або застосовуйте IIFE (негайно виконувана функція) для захоплення поточного значення i.

Питання 5

console.log([] + []);  
console.log([1, 2] + [3, 4]);  
console.log([] == ![]);
""  
"1,23,4"  
true
  • [] + [] дає порожній рядок, оскільки оператор +, застосований до масивів, конвертує їх у рядки, а два порожніх рядки утворюють "".
  • [1, 2] + [3, 4] дає "1,23,4", тому що кожен масив перетворюється на свій рядковий вигляд ("1,2" і "3,4") і з’єднується.
  • [] == ![] повертає true, тому що ![] дорівнює false, а [] перетворюється на false у порівнянні за слабкою рівністю.
    Таким чином, false == false повертає true.

Питання 6

x = 10;  
console.log(x); // 10 оскільки змінна піднімається (hoisted) на початок області видимості  
var x;
console.log({}+"1"+1); // [object object]11  
console.log(typeof NaN) // number

Питання 7

const arr1 = [1,2,3];  
const arr2 = [1,2,3];  
const str = "1,2,3";  

console.log(arr1 == str); // true  
console.log(arr1 == arr2); // false

Питання 8

const arr = [11, 0, '', false, 2, 1];  
const filtered = arr.filter(Boolean);  
console.log(filtered); // [11,2,1] 0 є хибним значенням (falsy value)

Питання 9

const arr = ["A","B","C","D","E"]  
console.log(Object.keys(arr)); // [0,1,2,3,4]

Висновок: Опанування масивів для успіху на співбесідах 🚀

Масиви – це більше, ніж просто базова структура даних у JavaScript; вони є основою вирішення задач на співбесідах. Завдяки розумінню їхніх особливостей, методів і взаємодії з особливостями JavaScript ви отримаєте значну перевагу у вирішенні реальних проблем.

Від розуміння того, як поводяться "дірки" в масивах, до ефективного використання методів масивів, таких як splice() та filter(), кожне питання в цій статті підкреслює універсальність і складність, які масиви додають до завдань. Важливість замикань (closures) у циклах, приведення типів під час операцій та поведінка властивостей масивів, таких як length, також показують, як масиви в JavaScript виходять за межі простого зберігання даних, створюючи складні логічні виклики.

Основні висновки:

  1. Особливості масивів: Зрозумійте, що концепції, як-от "дірки" в масивах ([1, , 3]) і маніпуляції з arr.length, є унікальними для JavaScript і можуть призводити до неочікуваних результатів, якщо їх не розуміти.
  2. Володіння методами: Методи, такі як splice() і filter(), є потужними інструментами для маніпулювання та вилучення даних, що важливо для вирішення практичних задач.
  3. Поведінка під час операцій: Дізнайтеся, як JavaScript обробляє масиви в операціях ([] + [] або [] == ![]), щоб уникнути несподіванок під час приведення типів.
  4. Замикання та область видимості: Пам’ятайте про важливість використання let замість var у циклах і замиканнях, що може вплинути на логіку асинхронних задач.
  5. Готовність до співбесід: Навіть прості на перший погляд питання про масиви можуть перевірити ваші базові знання про основні механізми JavaScript, такі як приведення типів, підняття змінних (hoisting) або перетворення рядків.

Чому це важливо:

Опанування масивів не лише дозволяє вам розв’язувати задачі під час співбесід, а й поглиблює ваше розуміння JavaScript в цілому. Співбесіди спрямовані на те, щоб змусити вас критично мислити про інструменти, які ви використовуєте щодня, і масиви часто стають початковою точкою цього дослідження.

Якщо ви продовжуєте свій шлях у JavaScript, пам’ятайте: масиви – це не просто структури даних; це майданчик для дослідження алгоритмів, вирішення задач і концепцій програмування.

Далі ми перейдемо до об’єктів у JavaScript, відкриваючи їхні секрети та розширюючи ваш набір інструментів для успіху на співбесідах. Продовжуйте навчатися, кодуйте й опановуйте мистецтво JavaScript крок за кроком! 🚀

Перекладено з: [Day-8] Mastering Arrays: Essential Interview Questions Every Developer Should Know?

Leave a Reply

Your email address will not be published. Required fields are marked *