Javascript Boş bir diziyi azaltın


108

Diziyi küçülttüğümde, sıfır sayısını elde etmeye çalışıyorum, ancak fonksiyonun davranışını net olarak anlamıyorum

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

sonuç

TypeError: Reduce of empty array with no initial value

Görünüşe göre dizi boşsa onu azaltamam

[""].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

sonuç

""

Dizideki tek öğe boş bir dizeyse, boş bir dize alır

Yanıtlar:


231

İkinci parametre , başlangıç ​​değeri içindir.

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
}, 0);

veya ES6 kullanarak:

[].reduce( (previousValue, currentValue) => previousValue + currentValue, 0);

24

Her iki davranış da spesifikasyona göredir .

reduceİkinci bağımsız değişken olarak açıkça bir başlangıç ​​"birikmiş" değeri sağlamadığınız sürece boş bir dizi olamaz :

İnitialValue sağlanmadıysa, previousValue dizideki ilk değere, currentValue ise ikinciye eşit olacaktır. Dizi hiçbir öğe içermiyorsa ve initialValue sağlanmıyorsa bu bir TypeError'dır.

Dizinin en az bir öğesi varsa, bir başlangıç ​​değeri sağlamak isteğe bağlıdır. Bununla birlikte, biri sağlanmadıysa, dizinin ilk öğesi başlangıç ​​değeri olarak kullanılır reduceve geri çağrınızı çağırarak dizi öğelerinin geri kalanını işlemeye devam eder. Sizin durumunuzda, dizi yalnızca tek bir öğe içerir, böylece geri çağırma yoluyla işlenecek başka öğe olmadığından, öğe hem başlangıç ​​değeri hem de son değer olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.