Заменив цикл for, который перебирает массив с функциональным программированием эквивалент


Как бы я сделать то же самое в функциональной парадигме?

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[i]), 2) * tempE * (1 - tempE);
    }
    return 1 / Math.pow(q, 2) * tempSum;
};


Комментарии
1 ответ

Я думаю, что-то вроде этого будет работать для вас.

Array.prototype.zip = function(other) {
if (!Array.prototype.isPrototypeOf(other)) {
throw new TypeError('Expecting an array dummy!');
}
if (this.length !== other.length) {
throw new Error('Must be the same length!');
}
var r = [];
for (var i = 0, length = this.length; i < length; i++) {
r.push([this[i], other[i]]);
}
return r;
};

Player.prototype.d2 = function (ratingList, rdList) {
var self = this;
return 1 / Math.pow(q, 2) *
ratingList
.zip(rdList)
.map(function (elem) {
var tempE = self.e(elem[0], elem[1]);
return Math.pow(self.g(elem[1]), 2) * tempE * (1 - tempE);
})
.reduce(function (acc, value) {
return acc + value;
});
};

1
ответ дан 3 августа 2011 в 03:08 Источник Поделиться