Я показал 10 вопросов, связанных с массивами в JavaScript, с которыми я сталкивался на собеседованиях среднего уровня и за его пределами, а также ответы на них. Я надеюсь, что эта статья окажется для вас полезной, когда вы будете решать эти распространенные проблемы, связанные с массивами, на собеседованиях по JavaScript.
1. Печать уникальных значений из массива
const arr = [1, 2, 3, 3, 4, 5, 5]; const uniqueArr = [...new Set(arr)]; console.log(uniqueArr); // [1, 2, 3, 4, 5]
2- Как использовать метод reduce()
для суммирования элементов массива без использования цикла?
const arr = [1, 2, 3, 4, 5]; const sum = arr.reduce((acc, current) => acc + current, 0); console.log(sum); // 15
3- Как объединить вложенный массив в один плоский массив?
const arr = [1, [2, 3], [4, [5, 6]]]; const flatArr = arr.flat(Infinity); console.log(flatArr); // [1, 2, 3, 4, 5, 6]
4- Как найти пересечение двух массивов?
const arr1 = [1, 2, 3, 4]; const arr2 = [3, 4, 5, 6]; const intersection = arr1.filter(item => arr2.includes(item)); console.log(intersection); // [3, 4]
5. Напишите функцию, которая меняет местами первые два элемента в заданном массиве (решение с помощью разрушения)
function swapFirstTwo([first, second, ...rest]) { return [second, first, ...rest]; } const array = [3, 5, 1, 4, 2]; console.log(swapFirstTwo(array)); // [5, 3, 1, 4, 2]
6. Объясните различные способы инвертирования массива и покажите каждый из них на примере кода.
// Reversing Array Elements Method 1: Using the reverse() method const arr1 = [1, 2, 3, 4, 5]; const reversedArr1 = arr1.reverse(); console.log(reversedArr1); // [5, 4, 3, 2, 1] // Reversing Array Elements Method 2: Using the spread operator and reverse() const arr2 = [1, 2, 3, 4, 5]; const reversedArr2 = [...arr2].reverse(); console.log(reversedArr2); // [5, 4, 3, 2, 1]
7- Как использовать метод reduce()
для суммирования элементов массива без использования цикла?
const numbers = [1, 2, 3, 2, 4, 2, 5]; const count = numbers.reduce((acc, curr) => (curr === 2 ? acc + 1 : acc), 0); console.log(count); // 3 (The number 2 appears 3 times in the array)
8. Объясните различные способы сортировки массива в порядке убывания и покажите каждый из них на примере кода.
// Reversing Array Elements Method 1: Using the reverse() method const arr1 = [1, 2, 3, 4, 5]; const reversedArr1 = arr1.reverse(); console.log(reversedArr1); // [5, 4, 3, 2, 1] // Reversing Array Elements Method 2: Using the spread operator and reverse() const arr2 = [1, 2, 3, 4, 5]; const reversedArr2 = [...arr2].reverse(); console.log(reversedArr2); // [5, 4, 3, 2, 1]
9- Как использовать метод filter()
для фильтрации нечетных чисел из массива?
const numbers = [1, 2, 3, 4, 5, 6, 7, 8]; const oddNumbers = numbers.filter(num => num % 2 !== 0); console.log(oddNumbers); // [1, 3, 5, 7]
10 (Бонус). Можете ли вы скопировать массив тремя разными способами и какой метод наиболее безопасен для предотвращения непреднамеренных изменений исходного массива?
Первое решение. Вы можете скопировать массив с помощью оператора распространения (
...
). Этот метод создает новую копию массива без изменения оригинала.
const originalArray = [1, 2, 3, 4, 5]; const copiedArray = [...originalArray]; console.log(copiedArray); // [1, 2, 3, 4, 5]
Второе решение. Вы также можете скопировать массив, используя метод
Array.from()
. Этот метод преобразует объект, подобный массиву, или повторяемый объект в массив.
const originalArray = [1, 2, 3, 4, 5]; const copiedArray = Array.from(originalArray); console.log(copiedArray); // [1, 2, 3, 4, 5]
Третье решение. Вы можете сделать копию массива, используя метод
slice()
. Этот метод создает неглубокую копию массива.
const originalArray = [1, 2, 3, 4, 5]; const copiedArray = originalArray.slice(); console.log(copiedArray); // [1, 2, 3, 4, 5]
Самый безопасный метод: оператор расширения
Самым безопасным из этих трех методов предотвращения непреднамеренных изменений исходного массива является оператор расширения (...
). Он создает глубокую копию массива, гарантируя, что изменения, внесенные в скопированный массив, не повлияют на оригинал. Другие методы (Array.from()
и slice()
) создают неполные копии. Это означает, что если массив содержит вложенные массивы или объекты, изменения в этих вложенных структурах будут отражены как в исходном, так и в скопированном массивах.