如果数组长度为1,则对数组的操作返回NaN

时间:2011-08-03 13:48:49

标签: javascript functional-programming

Player.prototype.d2 = function(ratingList, rdList) {
    var tempSum = 0;
    for (var i = 0; i < ratingList.length; i++) {
        var tempE = this.e(ratingList[i], rdList[i]);
        tempSum += Math.pow(this.g(rdList[1]), 2) * tempE * (1 - tempE);
    }
    return 1 / Math.pow(q, 2) * tempSum;
};

这似乎有点问题。

除非ratingListrdListoutcomeList仅包含一个值,否则一切似乎都很好。然后东西设置为NaN而不是。我已经尝试将索引更改为-1,将比较更改为ratingList.length - 1,甚至尝试使用递减的for循环,但如果数组只包含一个值,它似乎总是返回NaN。 / p>

有没有办法(我确定有 - 我想问题是如何)取消for循环并将其替换为Array.map()或zip或任何组合各种功能?

You can see ALL of the code here -- it's about 60 LOC

1 个答案:

答案 0 :(得分:2)

d2函数中,您在for循环中有这一行:

tempSum += Math.pow(this.g(rdList[1]), 2) * tempE * (1 - tempE);

因此,假设rdList至少是2个元素,但bob只有一个元素。

也许它必须是rdList[i]