Skip to content

Методы массивов

Добавление и поиск элементов, перебор, преобразование и фильтрация.

also in web development basics

On this page

Метод массива – готовая операция, которую вызывают после точки: fruits.push(...). Одни методы меняют исходный массив, другие возвращают новый результат.

Добавить или удалить элемент

МетодДействиеЧто возвращает
push(value)Добавляет в конецНовую длину массива
pop()Удаляет последний элементУдалённый элемент
unshift(value)Добавляет в началоНовую длину массива
shift()Удаляет первый элементУдалённый элемент

Эти четыре метода изменяют исходный массив. Названия можно запомнить по очередям: push и pop работают с концом, unshift и shift – с началом.

main.js
const queue = ["Анна", "Борис"];
 
queue.push("Вера"); // Добавили в конец.
const firstPerson = queue.shift(); // Забрали первого.
 
console.log(firstPerson); // "Анна"
console.log(queue); // ["Борис", "Вера"]

Функция для каждого элемента

Методы forEach, map, filter, find и reduce принимают функцию. Функцию, которую передали другой функции, называют callback (функция обратного вызова): метод сам запускает её для элементов массива.

main.js
const numbers = [5, 4, 3];
 
numbers.forEach((number) => {
  console.log(number);
});

Callback-функция может получить не только элемент, но и его индекс. Например, второй параметр forEach - номер элемента, начиная с нуля:

main.js
const greetings = ["Привет", "Как дела?"];
 
greetings.forEach((greeting, index) => {
  console.log(`${index + 1}. ${greeting}`);
});

Выбирайте метод по результату задачи:

МетодВопросРезультат
forEachЧто сделать с каждым элементом?Не создаёт массив результата
mapВо что преобразовать каждый элемент?Новый массив той же длины
filterКакие элементы оставить?Новый, возможно более короткий массив
findКакой первый элемент подходит?Элемент или undefined
reduceКак собрать одно общее значение?Например, число или объект
main.js
const prices = [120, 250, 80];
 
const doubled = prices.map((price) => price * 2);
const expensive = prices.filter((price) => price >= 100);
const firstLarge = prices.find((price) => price >= 200);
const total = prices.reduce((sum, price) => sum + price, 0);
 
console.log(doubled); // [240, 500, 160]
console.log(expensive); // [120, 250]
console.log(firstLarge); // 250
console.log(total); // 450

В reduce начальное значение 0 – это первый накопленный результат. Указание начального значения делает поведение понятнее и работает также для пустого массива.

В примере reduce первый параметр sum - уже накопленная сумма, второй price - очередная цена. Шаги такие: 0 + 120, затем 120 + 250, затем 370 + 80. В итоге получаем 450.

Если find не находит подходящий элемент, он возвращает undefined - значение JavaScript, означающее, что результата нет. В отличие от filter, find возвращает один первый элемент, а не новый список.

Если нужно получить новый список, не используйте forEach только потому, что его название знакомо. map преобразует, filter отбирает, а find останавливается на первом совпадении. Справочник всех методов: Array на MDN.