我正在尝试通过一个数组并添加所有数字。我使用console.log来显示脚本使用的值,如下所示。我一直在if()
尝试不同的变化,但似乎没有什么工作正常。
var billycount = 0;
var billyTotalScore = billyScoreList.reduce(function(score, total) {
if(score === " ") {
billycount += 1;
}
return +total + +score;
});
console.log(billycount); //0
console.log(billyTotalScore); //30
console.log(billyScoreList); // ["12", " ", "18"]
console.log(billyAverageScore) //10
var billyAverageScore = billyTotalScore/(billyteamlist.length - billycount);
billyAverageScore
的答案应该等于15(30/2)。
我尝试了if(score === "0")
,它给出了与上面相同的答案和if (score !== true)
,它给了我2的计数和30的平均值。我认为reduce()
将空字符串视为我希望能够计算所有空字符串,这样我就可以在找到平均值时从长度上对它们进行折扣。
我一直在摔跤,感觉我错过了背后的一个关键概念。任何帮助都会很棒!谢谢!
更新:
对于任何偶然发现这一点的人来说,这是我开始工作的代码。
var billycount = 0;
var billyTotalScore = billyScoreList.reduce(function(total, score) {
if (score === " " || total === " ") {
billycount++;
}
return +total + +score;
});
var billyAverageScore = billyTotalScore/(billyteamlist.length - billycount);
当我刚刚检查if (score === " ")
时,我忘记了得分永远不会等于数组中的第一项。我刚刚添加了|| total === " "
。如果第一个元素是"那么唯一一次会崩溃的时候"第二个元素是0.我想billycount ++作为第一个元素而不是第二个元素。我不得不多考虑一下。
答案 0 :(得分:2)
reduce
的回调函数应该是function(total, score)
而不是function(score, total)
。
请参阅MDN:
previousValue
The value previously returned in the last invocation of the callback, or initialValue, if supplied. (See below.)
currentValue
The current element being processed in the array.