【问题标题】:Group items in for loops在 for 循环中分组项目
【发布时间】:2018-07-01 19:03:16
【问题描述】:

使用 JavaScript,我正在循环一个值数组。

var values = [1, 2, 1, 3, 1, 3, 4, 1]
for (let i = 0; i < values.length; i++) {
  console.log(values[i])
}

我想得到每组 4 的总和。我可以使用以下方法在多个 for 循环中执行此操作:

var values = [1, 2, 1, 3]
var sum1 = 0
for (let i = 0; i < values.length; i++) {
  sum1 += parseInt(values[i]);
}

var values = [1, 3, 4, 1]
var sum2 = 0
for (let i = 0; i < values.length; i++) {
  sum2 += parseInt(values[i]);
}

如何按 4 分组并使用一个 for 循环获得每个组的值的总和?

【问题讨论】:

  • parseInt?有什么特殊含义吗?
  • @NinaScholz 这个例子不需要,真的。只需将字符串转换为整数。
  • Split array into chunks of N length 的可能重复项。另请参阅Array 方法。

标签: javascript


【解决方案1】:

可以slice()数组和reduce()每个子数组

var values = [1, 2, 1, 3, 1, 3, 4, 1]

var sums =[];

for(let i=0; i< values.length; i=i+4){
   const subArr= values.slice(i,i+4);
   const sum = subArr.reduce((a,c)=>a+c)
   sums.push(sum)
}

console.log(sums)

【讨论】:

    【解决方案2】:

    您可以使用计数器。当达到组限制时重置计数器和总和变量,如下例所示:

    var values = [1, 2, 1, 3, 1, 3, 4, 1];
    var result = [];
    var counter = 0;
    var sum = 0;
    for(var i = 0; i < values.length; i++){
      counter++;
      sum += values[i];
      if(counter === 4 || i === values.length-1){
        result.push(sum);
        counter = 0;
        sum = 0;
      }
    }
    
      
      console.log(result);

    【讨论】:

      【解决方案3】:

      您可以将一个数组作为结果集,并将索引除以 4,然后取整数值进行相加。

      var values = [1, 2, 1, 3, 1, 3, 4, 1],
          grouped = values.reduce((r, v, i) => {
              var k = Math.floor(i / 4);
              r[k] = r[k] || 0;
              r[k] += v;
              return r;
          }, []);
          
      console.log(grouped);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-12
        • 2014-07-20
        • 2019-07-30
        • 2014-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多