簡體   English   中英

我如何遍歷數組並僅求和一半項? (JavaScript的)

[英]How can I loop through array and sum only half the items? (javascript)

假設我有一個由十個項目組成的數組,我想制作2個單獨的數組,以奇數和偶數分布將原始項中的項目相加。 例如:

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()函數的使用是“我的難題中缺少的部分” :)

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

使用帶mod檢查的for循環來檢查偶數或奇數索引。 將相關數組的和推入相關數組的下一個值。

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

在這里使用按位OR |0可確保sum [-1]中的未定義值是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)); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="a"></div> <div id="b"></div> 

這只需一個循環即可完成您要查找的內容:

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通常被認為是不好的做法,除非它們是類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM