Array.reduce() в JavaScript — згорнути масив в одне значення
Опис
автор: Bond
Загальний опис
автор: NagarD
- Порада
-
При використанні методу
автор: Bondreduce()варто мати на увазі, що він може бути потужним інструментом для зведення масиву до одного значення, такого як обчислення суми, середнього значення або знаходження максимального/мінімального елемента. Ви можете використовувати методreduce()для створення власних функцій агрегації даних на основі потреб вашої програми. - Порада
-
Метод
автор: Bondreduce()є універсальним. Він очікує, що значенняthisматиме властивістьlengthта інші властивості з цілими числовими ключами. - Нотатка
-
Крім функції аккумулятора, метод
автор: Bondreduce()також приймає необов'язковий початкове значення аккумулятора. Це значення використовується як початкове значення аккумулятора перед першою ітерацією. Якщо початкове значення не вказано, перший елемент масиву використовується як початкове значення аккумулятора. У випадку порожнього масиву без початкового значення аккумулятора, методreduce()повернеundefined.
Синтаксис
reduce(callbackFn)
reduce(callbackFn, initialValue)
Параметри
callbackFn-
Функція, яка має бути викликана для кожного елемента масиву. Результат її виконання стає значенням параметра
accumulatorдля наступного виклику. В кінцевому підсумку, значення, що повертається з останнього виклику, стає кінцевим результатом, який повертаєreduce().Функція
callbackFnвикликається з наступними аргументами:accumulator: Значення, що отримано в результаті попереднього викликуcallbackFn. При першому виклику - цеinitialValue, якщо вказано, в іншому випадку - значенняarray[0].currentValue: Значення поточного елемента. При першому виклику - це значенняarray[0], якщо було вказаноinitialValue, в іншому випадку - значенняarray[1].currentIndex: Позиція індексуcurrentValueв масиві. При першому виклику - 0, якщо було вказаноinitialValue, в іншому випадку - 1.array: Масив, на якому було викликаноreduce().
initialValue-
Початкове значення для
автор: Bondaccumulator, коли здійснюється перший виклик зворотньої функціїcallbackFn. Якщо передбачено параметрinitialValue, то зворотня функція розпочинає свою роботу з першого елемента масиву, вважаючи його поточним значенням.
Повернення
value-
Результат, який виходить після того, як "редуктор" зворотної функції успішно опрацював весь масив.
автор: Bond
Винятки
TypeError: якщо масив не містить елементів, а початкове значення не надане.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 3 | 3 | 4 | 10.5 | 12 | 9 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 18 | 4 | 3.2 |
| Переглядач | ||
|---|---|---|
| 0.10.0 | 1.0 |
Приклади
+ запропонувати свій приклад у пісочниці
Наведений код показує, що відбувається, коли ми викликаємо reduce() з масивом без початкового значення.
const array = [15, 16, 17, 18, 19];
function reducer(accumulator, currentValue, index) {
const returns = accumulator + currentValue;
console.log(
`accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, returns: ${returns}`,
);
return returns;
}
array.reduce(reducer);
Цей приклад демонструє використання методу reduce() для обчислення суми елементів масиву з використанням початкового значення. Результат виводиться на сторінці.
HTML
<header>
<h2 class="title">Обчислення суми елементів масиву</h2>
<p class="description">Цей приклад демонструє використання методу reduce() для обчислення суми елементів масиву з використанням початкового значення.</p>
</header>
<main>
<pre>[1, 2, 3, 4]</pre>
<div id="output"></div>
</main>
CSS
body {
font-size: 16px;
line-height: 1.5;
font-family: monospace;
}
pre {
color: #ff0000;
}
header {
background-color: #f1f1f1;
margin-bottom: 25px;
padding: 15px;
-webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
-moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}
header h2.title {
padding-bottom: 15px;
border-bottom: 1px solid #999;
}
header p.description {
font-style: italic;
color: #222;
}
JS
const array1 = [1, 2, 3, 4];
const initialValue = 0;
const sumWithInitial = array1.reduce(
(accumulator, currentValue) => accumulator + currentValue,
initialValue);
document.getElementById('output').innerHTML = `Сума елементів: ${sumWithInitial}`;
//# sourceURL=pen.js
Дві найчастіші поламки reduce(): виклик без початкового значення на порожньому масиві та колбек без return.
const cart = [
{ name: 'Клавіатура', price: 1200 },
{ name: 'Миша', price: 450 },
];
// як треба: початкове значення передано
console.log(cart.reduce((sum, item) => sum + item.price, 0)); // 1650
// без нього порожній масив валить весь скрипт
try {
[].reduce((sum, item) => sum + item.price);
} catch (e) {
console.error(e.name + ': ' + e.message);
}
console.log([].reduce((sum, item) => sum + item.price, 0)); // 0
// колбек із фігурними дужками, але без return
console.log(cart.reduce((sum, item) => { sum + item.price; }, 0)); // undefined
// початкове значення задає тип результату
console.log([1, 2, 3].reduce((a, b) => a + b, '')); // "123", а не 6
console.log([1, 2, 3].reduce((a, b) => a + b, 0)); // 6
Використання reduce() з розрідженими (sparse) масивами.
console.log([1, 2, , 4].reduce((a, b) => a + b)); // 7
console.log([1, 2, undefined, 4].reduce((a, b) => a + b)); // NaN
const sum = [15, 16, 17, 18, 19].reduce(
(accumulator, currentValue) => accumulator + currentValue,
10,
);
console.log(sum); // → 95 (85 із масиву + 10 початкового значення)
Сума значень в масиві об'єктів.
const objects = [{ x: 1 }, { x: 2 }, { x: 3 }];
const sum = objects.reduce(
(accumulator, currentValue) => accumulator + currentValue.x,
0
);
console.log(sum); // 6
Коментарі
Коментарів ще немає — будьте першим!