Коротка відповідь
juniorМетоди масивів – це функції, що працюють над колекцією елементів. Я пам’ятаю push, pop, shift, unshift, slice, splice, concat, join, indexOf, lastIndexOf, includes, filter, map, reduce, forEach, find, findIndex, some, every, sort, reverse. Вони потрібні для додавання/видалення елементів, копіювання, пошуку, фільтрації, трансформації, агрегації та ітерацій.
Повне пояснення
Що це і навіщо
Методи масивів – це вбудовані функції, що дозволяють маніпулювати колекцією елементів без створення зовнішніх утиліт. Вони забезпечують швидкий, читабельний та безпечний спосіб обробки даних.
Ключові принципи/терміни
- mutating (змінюють оригінальний масив):
push,pop,shift,unshift,splice,sort,reverse. - non‑mutating (повертають новий масив):
slice,concat,filter,map,reduce,find,findIndex,some,every. - search:
indexOf,lastIndexOf,includes. - utility:
joinдля конвертації в рядок.
Як це працює
Кожен метод приймає аргументи, що визначають дію (наприклад, індекс, новий елемент, функція‑callback). Внутрішньо JavaScript-рушій виконує оптимізовані цикли, часто з використанням SIMD або JIT‑компіляції.
Практика і реалізація
const arr = [1, 2, 3];
arr.push(4); // mutating
const newArr = arr.slice(1, 3); // non‑mutating
const sum = arr.reduce((a,b)=>a+b,0);
interface User { id: number; name: string }
const users: User[] = [];
users.push({id:1, name:'Alice'});
const names = users.map(u=>u.name);
Тестування
import { describe, it, expect } from 'vitest';
describe('Array methods', () => {
it('push adds element', () => {
const a = [1];
a.push(2);
expect(a).toEqual([1,2]);
});
});
Особливості в контексті JS Core
Array.fromіArray.ofдля створення масивів.flat,flatMap(ES2019) для розгортання вкладених масивів.Array.prototype.at(ES2022) для доступу за негативним індексом.
Оптимізація, типові помилки та edge cases
- Неправильне використання
splice– змінює оригінал, що може порушити реактивність. reduceбез ініціалізатора – викликає помилку при порожньому масиві.mapз асинхронною функцією – повертає масив промісів, а не результату.sortбез компаратора – сортує як рядки, що може бути неочікуваним.includesзNaN– працює, але інші методи (indexOf) ні.filterзthisArg– не змінює контекст, якщо функція не прив’язана.forEachзbreak/continue– не працює, треба використовувати цикл.- Використання
new Array(n)– створює «порожні» елементи, що пропускаються уforEach.
Cheatsheet
| Метод | Тип | Приклад |
|---|---|---|
push | mutating | arr.push(5) |
slice | non‑mutating | const b = arr.slice(1) |
reduce | non‑mutating | arr.reduce((s,v)=>s+v,0) |
Follow‑up питання
- Яким чином
Array.prototype.flatMapвідрізняється від послідовного викликуmapіflat? - Чому
sort()без компаратора сортує як рядки, а не числа?