在JavaScript中循环遍历数组时忽略空字符串

时间:2012-02-28 05:57:15

标签: javascript reduce

我正在尝试通过一个数组并添加所有数字。我使用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 ++作为第一个元素而不是第二个元素。我不得不多考虑一下。

1 个答案:

答案 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.