В этой статье речь пойдёт о функция .map(), .reduce() и .filter(). Это очень удобные и крутые функции, которые лично я освоил только с приходом в мою жизнь React. Там это практикуется очень сильно, а вот в классическом JavaScript на эти функции скудновато.
Все эти функции отлично работают через конструкцию, которую я покажу ниже. С приходом ES6 использовать их будет вообще вкусно. Всё показываю ниже.
.map()
Этот метод позволяет собрать новый массив по определённому правилу, которое мы зададим в функции обработчике. Например, нам нужно получить массив ID’шников товаров из массивах товаров. Обычно, все бы мы использовали функцию .forEach(), но с помощью .map() это всё делается элементарно:
let array = [ { id: 1, name: "Баклажаны" }, { id: 4, name: "Помидоры" }, { id: 58, name: "Огурцы" }, ]; const itemIds = array.map(function(item) { return item.id; }); console.log(itemIds); //[ 1, 4, 58 ]
Более того, в ES6 это бы выглядело так:
const itemIds = array.map(item => item.id); console.log(itemIds); //[ 1, 4, 58 ]
Что вообще-то очень элегантно и супер-красиво. Дальше — интереснее.
.reduce()
Позволяет просуммировать количество одного из свойств объекта с начальным числом/строкой. Здесь уже сложнее, первым аргументом функция принимает обработчик, а вторым изначальное число. Например:
let array = [ { users: 23, group: "Любители джаза" }, { users: 15, group: "Любители блюза" }, { users: 9, group: "Любители соула" }, ]; const usersTotal = array.reduce(function(counter, element) { return counter + element.users; }, 0); console.log(usersTotal); //47
А так на ES6:
const usersTotal = array.reduce((counter, element) => counter + element.users, 0);
.filter()
Последняя функция уже более часто используемая, но всё равно не так активно, как банальный forEach(). Собственно, она позволяет отфильтровать элементы массива. Пример использования:
let array = [ { name: "Miracle", team: "Liquid" }, { name: "Arteezy", team: "EG" }, { name: "Suma1L", team: "EG" }, { name: "KuroKy", team: "Liquid" }, ]; const liquidPlayers = array.filter(function(player) { return player.team === "Liquid"; }); const egPlayers = array.filter(function(player) { return player.team === "EG"; }); console.log(liquidPlayers); //Массив из объектов игроков Liquid console.log(egPlayers); //Массив из объектов игроков EG
Ну и тут тоже по традиции на ES6:
const liquidPlayers = array.filter(player => player.team === "Liquid");
Собственно, это всё. Более подробно вы можете почитать на MDN Web Docs: .map(), .reduce(), .filter().