我怎样才能遍历数组并只将一半的项加起来? (JavaScript的)

时间:2015-05-13 16:08:01

标签: javascript arrays

说我有一个包含十个项目的数组,并且我想制作两个单独的数组,它们通过奇数和偶数分布对原始项目中的项目进行求和。 例如:

OriginalArray [288,333,313,296,102,299,333,333,316,289]
arraySumA [288,288+313,288+313+102,288+313+102+333,288+313+102+333+316]
arraySumB [333,333+296,333+296+299,333+296+299+333,...]

如何使用不超过一个循环(如果可能)?

更新:感谢大家的建议,我最终没有使用它们,但他们确实帮助我设计了自己的解决方案。 特别感谢你@Dana Woodman你使用push()函数是#34;我的拼图中缺少的部分" :)

3 个答案:

答案 0 :(得分:1)

var arraySumA = OriginalArray.reduce(function(c, x, i) {
    if(i % 2==1) c += x;
    return c;
});

var arraySumB = OriginalArray.reduce(function(c, x, i) {
    if(i % 2==0) c += x;
    return c;
});

或通过一次Array.prototype.reduce来电:

var sums = OriginalArray.reduce(function(c, x, i) {
    if(i % 2==0) c.even += x;
    else c.odd += x;
    return c;
}, {even: 0, odd: 0});

答案 1 :(得分:1)

对偶数或奇数索引使用带有mod检查的for循环。将相关数组的总和推入相关数组的下一个值。

if($mysqli->affected_rows >= 1) {
    // success
} else {
    // failure
}

在此处使用按位OR for(var i = 0; i < original.length; i++){ if( i % 2 == 0 ){ sumA.push(original[i]+(sumA[sumA.length-1]|0)); }else{ sumB.push(original[i]+(sumB[sumB.length-1]|0)); } } 可确保sum [-1]中的未定义值为0。

|0
var original = [288,333,313,296,102,299,333,333,316,289];
var sumA = [], sumB = [];

for(var i = 0; i < original.length; i++){
  if( i % 2 == 0 ){
    sumA.push(original[i]+(sumA[sumA.length-1]|0));
  }else{
    sumB.push(original[i]+(sumB[sumB.length-1]|0));
  }
}

$("#a").text(JSON.stringify(sumA));
$("#b").text(JSON.stringify(sumB));

答案 2 :(得分:0)

这应该只用一个循环来完成你正在寻找的东西:

var OriginalArray = [288,333,313,296,102,299,333,333,316,289];
var arraySumA = [];
var arraySumB = [];

// You use any type of iterator here, like a standard for-loop as well.    
OriginalArray.forEach(function (num) {
  if (num % 2 === 0) {
    // Sum of even items
    var prev = arraySumA[arraySumA.length - 1] | 0;
    arraySumA.push(prev + num);
  } else {
    // Sum of odd items
    var prev = arraySumB[arraySumB.length - 1] | 0;
    arraySumB.push(prev + num);
  }
});

/*
Results in:
arraySumA = [288, 584, 686, 1002]
arraySumB = [333, 646, 945, 1278, 1611, 1900]
*/

如果前一个的总和是现有数组的总和,那么您只需将前一个项目添加到当前项目。

样式说明:对于变量使用Pascal Case通常被认为是不好的做法,除非他们重新上课