Я показал 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()) создают неполные копии. Это означает, что если массив содержит вложенные массивы или объекты, изменения в этих вложенных структурах будут отражены как в исходном, так и в скопированном массивах.