Počáteční hodnota Array.prototype.reduces je volitelná

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.