Коротка відповідь
juniorforEach – це синхронний перебір елементів, що викликає колбек для кожного. map – повертає новий масив з результатами колбека, а filter створює підмножину елементів, що задовольняють умову. reduce агрегує значення в одне, а entries/keys/values повертають ітератори для ключів чи значень.
Повне пояснення
Що це і навіщо
forEach,map,filter,reduce– це стандартні перебираючі методи масиву в JavaScript, що дозволяють виконувати операції над елементами без явного циклу.
Ключові принципи/терміни
- forEach: виконує колбек для кожного елемента, не повертаючи новий масив.
- map: створює новий масив, застосовуючи колбек до кожного елемента.
- filter: повертає масив, що містить лише ті елементи, які задовольняють умову.
- reduce: агрегує всі елементи в одне значення (число, об’єкт тощо).
- entries/keys/values: повертають ітератори, що дозволяють перебирати ключі, значення або пари [ключ, значення].
Як це працює
- Кожен метод приймає колбек
(element, index, array)і виконується послідовно. forEachне змінює масив, а лише виконує побічні дії.mapстворює новий масив, не змінюючи оригінальний.filterтакож повертає новий масив, але з фільтрованими елементами.reduceприймає акумулятор і повертає одне значення після завершення.entries,keys,valuesповертають ітератори, які можна використовувати в цикліfor...of.
Практика і реалізація
const nums = [1, 2, 3];
nums.forEach(n => console.log(n)); // 1 2 3
const doubled = nums.map(n => n * 2); // [2,4,6]
const evens = nums.filter(n => n % 2 === 0); // [2]
const sum = nums.reduce((a,b)=>a+b,0); // 6
Тестування
import { describe, it } from 'vitest';
describe('array methods', () => {
it('map returns new array', () => {
const res = [1,2].map(x=>x*3);
expect(res).toEqual([3,6]);
});
});
Особливості в контексті JS Core
- Методи працюють на ES5+.
reduceможе приймати початкове значення, що визначає тип акумулятора.entriesповертає індекс як ключ, що корисно при переборі зfor...of.
Оптимізація, типові помилки та edge cases
- Не використовуйте
forEachдля створення нового масиву – кращеmap. - У
reduceне забувайте про початкове значення, інакше перший елемент буде використаний як акумулятор. filterповертає новий масив, тому не використовуйте його для великих даних без потреби.
Часті помилки
- Відсутність початкового значення в
reduce→ TypeError. - Використання
forEachзамістьmap→ не отримуєте новий масив. - Неочікуване мутування оригінального масиву в колбеках
map/filter. - Перевантаження колбека великими обчисленнями → зниження продуктивності.
- Забудьте про
returnу колбекуfilter→ повертає undefined. - Використання
entries()без розпакування[key, value]→ помилка. reduceбез обробки випадку порожнього масиву → NaN.forEachз асинхронним колбеком безawait→ непередбачувані результати.