【问题标题】:Loop through array and adding sums of each section循环遍历数组并添加每个部分的总和
【发布时间】:2014-02-07 17:48:11
【问题描述】:

所以我有 11 个复选框,分为 4 个不同的类别。每个类别都有 3 个复选框可供选择,除了最后一个,它有 2 个。我想检查每个类别中的复选框是否被选中,并找出该类别中有多少复选框被选中。我可能想太多了,但到目前为止,我把它作为我的 JS:

//I initially receive the checkbox values as a string that has 1 for checked and 0 for not checked.

var split_string = checkbox_string.split(",").map(Number);
console.log(split_string);

var sec = [];
var total = 0;
var split_int=[];
var sliced = 0;
for (var i = 0; i <= 3 ; ++i) {
    sec[i] = split_string.splice(0,3);
    console.log(sec[i]);
    for(var j = 0; j < sec[i].length; ++j){
    sliced = sec[i][j];
    total += sliced;
  }
  console.log("total= "+ total);
    window['section' + i] = total;

}

所以到目前为止,我已经很接近了,尽管我确信有一种更简单的方法可以做到这一点。我将字符串拆分为 4 个数组(例如 [1,0,1] [0,0,1] [1,1,1] [1,0])。然后我从每个数组中取出每个单独的数字并将其添加到总数中。

到目前为止,它将返回添加的第一个三个,然后在第二个循环中返回添加到前三个的第二个三个。因此,例如第一次总 = 2,第二次总 = 3,但我希望第二次总和仅基于第二个数组(所以如果遵循上面的例子,它将是 1)。

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:
    function summer(p,c,i) {
      if( i%3==0 ) p.push(0);
      p[p.length-1] += c;
      return p;
    }
    
    var split_string = [1,0,1,0,0,1,1,1,1,1,0];
    split_string.reduce(summer,[]); // [2, 1, 3, 1]
    

    【讨论】:

    • 我可能比我更喜欢这个解决方案。我什至没有想到要检查是否可以被 3 整除。感谢您的回答。
    【解决方案2】:

    好吧,我很笨,我只需要在数组底部添加total = 0。但如果有更好/更简单的方法,我仍然会感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-07
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多