reduce()
je jednou z těchto podceňovaných metod pole, která může být nesmírně užitečná pro akumulaci položek pole. Definujte počáteční hodnotu, iterujte všechny položky pole a definujte funkci zpětného volání pro vytvoření kombinovaného výsledku.
Krása:návratová hodnota každého zpětného volání je poskytnuta zpětnému volání další položky, takže můžete sečíst čísla nebo přeskupit položky pole uvnitř objektu.
reduce((previousValue, currentValue) => {
/* ... */
});
reduce((previousValue, currentValue, currentIndex) => {
/* ... */
});
reduce((previousValue, currentValue, currentIndex, array) => {
/* ... */
});
reduce((previousValue, currentValue, currentIndex, array) => {
/* ... */
}, initialValue);
A po všech těch letech, když se podíváme na tyto reduce
podpisy zpětného volání, zjistil jsem, že počáteční hodnota je volitelná. 😲
Zde je příklad sčítání čísel.
// sum all numbers in the array
// start with `0`
[1, 2, 3, 4, 5].reduce((previousValue, currentValue) => {
console.log(previousValue);
// the return value will be the next `previousValue`
return previousValue + currentValue;
}, 0); // 15
// Output in the console:
// 0
// 1
// 3
// 6
// 10
// 15
Můžete se zeptat, zda první iterace začíná 0
je nutné. A máte pravdu – je to nadbytečné a je to případ, kdy vůbec neuvádíte počáteční hodnotu!
// sum all numbers in the array
// start with `1`
[1, 2, 3, 4, 5].reduce((previousValue, currentValue) => {
console.log(previousValue);
// the return value will be the next `previousValue`
return previousValue + currentValue;
}); // 15
// Output in the console:
// 1
// 3
// 6
// 10
// 15
Bez druhého argumentu, reduce
smyčka začíná prvním záznamem pole místo počáteční hodnoty – ergo, ušetříte jednu iteraci! 🎉
To je šikovný malý nález! Velké díky Ramónovi, který tweetoval tento tip!
Pokud se chcete dozvědět více o metodě pole, přejděte na reduce
záznam na MDN.