簡體   English   中英

Javascript 減少一個空數組

[英]Javascript Reduce an empty array

當我減少數組時,我試圖得到數字零,但我不清楚函數的行為

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

結果

TypeError: Reduce of empty array with no initial value

似乎如果數組為空我不能減少它

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

結果

""

如果數組中唯一的元素是空字符串,則檢索空字符串

第二個參數是初始值。

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

或使用 ES6:

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

這兩種行為都符合規范

除非您明確提供初始“累積”值作為第二個參數,否則您不能reduce空數組:

如果未提供 initialValue,則 previousValue 將等於數組中的第一個值,而 currentValue 將等於第二個值。 如果數組不包含元素且未提供 initialValue,則為 TypeError。

如果數組至少有一個元素,則提供初始值是可選的。 但是,如果未提供,則使用數組的第一個元素作為初始值,並通過調用回調來reduce數組的其余元素。 在您的情況下,數組僅包含一個元素,因此該元素成為初始值和最終值,因為沒有更多元素要通過回調處理。

在您的示例中,必須先定義前一個值,因為它相當於為變量 previousvale 賦值

let previousvalue = 0;
is different from
let previousvalue;

我自己剛遇到這個問題,想用一個更簡單但現代的 JavaScript 示例給出答案。

JavaScript 的數組 reduce 函數遍歷一個數組(這里是list ),並通過使用累加器(這里是acc )計算數組中的每個項目(這里是value )來將其縮減為一個新結果(這里是sum ):

const sum = list.reduce((acc, value) => acc + value);

大多數reduce 操作更喜歡對初始累加器(第二個參數,也稱為初始值)進行操作。 在我們的示例中,它甚至是強制性的,因為否則求和運算將不起作用。 我們想將我們的值與初始值為 0 相加:

const sum = list.reduce((acc, value) => acc + value, 0);

reduce 函數的初始值是它的第二個參數(這里是0 )。 因此,如果您遇到錯誤:

TypeError: Reduce of empty array with no initial value

這只是意味着你必須為你的reduce 操作提供一個初始(空)數組,因為如果你提供一個空數組(這里是list )開始,它不起作用並抱怨這個錯誤。 為了修復它,提供一個空數組作為第二個參數:

const exponentials = list.reduce((acc, value) => {
  acc = acc.concat(value * value);
  return acc;
}, []);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM