将数组的奇数索引处的所有数字平方

4

我正在尝试对所有奇数索引的整数进行平方,以便稍后将整个数组相加。目前我已经做到了这一点:

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

如您所见,变量y需要进行一些编辑。我认为需要使用for循环,但不确定如何实现。

http://jsfiddle.net/marcusdei/xez8obd3/11/


我的头现在很疼,哈哈。我尽力了。 - Exploit
那是我的声音在说话吗? - Marco V
我必须注意到你想要奇数索引的元素平方,但是你实际上正在检查filter回调中的数字是否为奇数。小心。 - MaxArt
2个回答

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);


result的初始化值。可能不是必需的,但可以使事情更清晰。请参见MDN - Robby Cornelissen
好的,我会调整一下。谢谢! - Marco V

2

Robby的答案已经足够好了,但如果你想加速一点,你总是可以依靠经典的for循环:

for (var i = 0, sum = 0; i < arr.length; i++)
    sum += i & 1 ? arr[i] * arr[i] : arr[i];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接