我试图将奇数索引处的所有整数平方,以便我可以稍后将整个数组相加。这是我到目前为止的地方:
function verryNiceFunc(arr) {
var x = arr.filter(function(num) {
if (num % 2) return num;
}).reduce(function(previousValue, currentValue, index, array) {
return previousValue + currentValue;
});
var y = arr.filter(function(num) {
if (num % 2 != 1) return num;
}).reduce(function(previousValue, currentValue, index, array) {
return (currentValue * currentValue);
});
console.log(y);
return x + y;
}
verryNiceFunc([5, 6, 7, 8, 9, 10, 11, 12]);
//Should return 376
如您所见,var y需要一点编辑。我想我需要一个for循环,但不知道如何完成它。
答案 0 :(得分:4)
这应该这样做。在回调函数体中只有一个reduce
操作,带有奇数/偶数开关:
var values = [5, 6, 7, 8, 9, 10, 11, 12];
var result = values.reduce(function(result, value, i) {
return result += (i % 2 ? value * value : value);
}, 0);
alert(result);

答案 1 :(得分:2)
Robby's answer已经足够好了,但是如果你想加快速度,你总是可以依赖经典的for
周期:
for (var i = 0, sum = 0; i < arr.length; i++)
sum += i & 1 ? arr[i] * arr[i] : arr[i];