Цикличная обработка
- Цикличные методы в стандарте ES2015 (ES6). Не мутируют исходные массивы, всегда возвращают новые массивы.
- В параметрах анономной функции всегда стоят (item, index, array)
- Результат можно сохранять в переменную
| Метод | Описание |
|---|---|
.map() | мапинг |
.flatMap() | плоский мапинг |
.filter() | фильтрация |
.find() | поиск элемента с начала |
.findLast() | поиск элемента с конца |
.findIndex() | поиск индекса с нача ла |
.findLastIndex() | поиск индекса с конца |
.some() | проверка элемента |
.every() | проверка каждого элемента |
.sort() | сортировка |
.toSorted() | сортировка |
.reduce() | схлопывание |
.reduceRight() | схлопывание справа |
.forEach() | выполнение действий при итерациях |
.entries() / .keys() / .values() | итераторы в цикле for |
.map()
- Применяется для обработки исходного массива
- Всегда возвращает обработанный массив
- Не изменяет исходный массив (не мутирует)
- 3 параметра: элемент, индекс, исходный массив
const a = [
{ id: 1, name: 'alpha', active: true },
{ id: 2, name: 'beta', active: false },
{ id: 3, name: 'gamma', active: true },
];
const b = a.map((item, index, arr) => {
return item.name;
});
// shortcut
const b = a.map(item => item.name);
b; // ['alpha', 'beta', 'gamma']
.map() с условием
Пример использования с изменением значения полей.
const c = a.map((item, index) => {
if (item.name === 'alpha') {
return {
...item,
id: 0,
name: 'new alpha',
};
}
return item;
});
.flatMap()
- Когда нужно привести массив массивов в одномерный
const users = [
{ name: 'Ann', tags: ['js', 'react'] },
{ name: 'Bob', tags: ['node'] },
];
users.map(i => i.tags); // [ [ 'js', 'react' ], [ 'node' ] ] - многомерный массив
users.flatMap(i => i.tags); // [ 'js', 'react', 'node' ] - одномерный массив
.filter()
const a = [
{ id: 1, name: 'alpha', active: true },
{ id: 2, name: 'beta', active: false },
{ id: 3, name: 'gamma', active: true },
];
// в этой переменной будут элементы массива a с полем active === true
const b = a.filter(item => item.active); // [ { id: 1, name: 'alpha', active: true }, { id: 3, name: 'gamma', active: true } ]
.find()
- Возвращает элемент, а не массив
const a = [
{ id: 1, name: 'alpha', active: true },
{ id: 2, name: 'beta', active: false },
{ id: 3, name: 'gamma', active: true },
];
// вернёт первый попавшийся элемент с начала массива
const b = a.find(item => item.active); // { id: 1, name: 'alpha', active: true }
.findLast()
- Возвращает элемент, а не массив
const a = [
{ id: 1, name: 'alpha', active: true },
{ id: 2, name: 'beta', active: false },
{ id: 3, name: 'gamma', active: true },
];
// вернёт первый попавшийся элемент с конца массива
const b = a.findLast(item => item.active); // { id: 3, name: 'gamma', active: true }
.findIndex()
- Возвращает
indexпервого попавшего элемента с начала массива
const a = [
{ id: 1, name: 'alpha', active: true },
{ id: 2, name: 'beta', active: false },
{ id: 3, name: 'gamma', active: true },
];
// вернёт первый попавшийся индекс с начала массива
const b = a.findIndex(item => item.active); // 0
.findLastIndex()
- Возвращает
indexпервого попавшего элемента с конца массива
const a = [
{ id: 1, name: 'alpha', active: true },
{ id: 2, name: 'beta', active: false },
{ id: 3, name: 'gamma', active: true },
];
// вернёт первый попавшийся индекс с конца массива
const b = a.findLastIndex(item => item.active); // 2
.some()
- Возвращает
boolean
const a = [
{ id: 1, name: 'alpha', active: true },
{ id: 2, name: 'beta', active: false },
{ id: 3, name: 'gamma', active: true },
];
// проверяем один элемент на поле active === true
const b = a.some(item => item.active); // true
.every()
- Возвращает
boolean
const a = [
{ id: 1, name: 'alpha', active: true },
{ id: 2, name: 'beta', active: false },
{ id: 3, name: 'gamma', active: true },
];
// проверяем все элементы на поле active === true
const b = a.every(item => item.active); // false
// на пустом массиве true
[].every(i => i); // true
sort()
- Мутирует исходный массив
- Два параметра в анонимной функции
sortFunc().a-currentitem,b-nextitem. - Сравниваться должны типы
number sortFunc()должна возвращать сравнение этихnumber, и должно вернуться число< 0,= 0или> 0.< 0-currentменьше чемnext= 0-current===next> 0-currentбольше чемnext
Сортировка чисел
const a = [11, 2, 22, 1];
const b = a.sort((a, b) => a - b); // [ 1, 2, 11, 22 ]
// полная запись
function compareFn(a, b) {
// a is less than b by some ordering criterion
if (a < b) {
return -1;
// a is greater than b by the ordering criterion
} else if (a > b) {
return 1;
}
// a must be equal to b
return 0;
}
const c = a.sort(compareFn); // [ 1, 2, 11, 22 ]
Cортировка строк
const a = ['Jack', 'Rose', 'Anna', 'Zoey', 'Peter', 'Bob'];
const b = a.sort((curr, next) => curr.localeCompare(next)); // [ 'Anna', 'Bob', 'Jack', 'Peter', 'Rose', 'Zoey' ]