Операция над массивом возвращает NaN, если длина массива равна 1 - PullRequest
0 голосов
/ 03 августа 2011
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;
};

Кажется, это бит, о котором идет речь.

Все выглядит хорошо, если только ratingList, rdList и outcomeList не содержат только одно значение. Затем вместо этого устанавливается NaN. Я попытался изменить индекс на -1, изменив сравнение на ratingList.length - 1, даже пробовал его с уменьшающимся циклом for, но всегда кажется, что он возвращает NaN, если массивы содержат только одно значение.

Есть ли какой-либо способ (я уверен, что есть - я думаю, вопрос в том, как) покончить с циклом for и заменить его на Array.map() или zip или какой-либо композицией подобных функций?

Вы можете увидеть ВСЕ код здесь - это около 60 LOC

1 Ответ

2 голосов
/ 03 августа 2011

В функции d2 у вас есть эта строка в цикле for:

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

Таким образом, предполагается, что rdList - это минимум 2 элемента, но у вас есть только один для bob.

Может быть, это должно быть rdList[i]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...