在javascript中添加多个数组中的值

时间:2017-01-24 04:55:25

标签: javascript arrays

我有这样的数据:

[82, 131, 163]

我想在每个数组中添加相同索引的每个值,因此结果如下:

for(let i = 0; i < data.length; i++) {
  let eachArr = data[i]
  for(let j = 0; j < eachArr.length; j++){
    console.log(eachArr[j]);
  }
}

所以我试图遍历数据并获取每个数组。然后再次循环遍历每个数组,得到每个对象:

target

我不确定如何使用相同的索引添加每个值并将其推送到新数组

4 个答案:

答案 0 :(得分:2)

Array#reduce方法使用Array#forEach方法。

// iterate over the array
data.reduce(function(arr, o) {
  // itrate over the inner array
  o.forEach(function(obj, i) {
    // define array index if not defined and add the property value
    arr[i] = (arr[i] || 0) + obj.value;
  });
  // return the array reference
  return arr;
  // set initial value as an empty array for holding the result
}, []) 

&#13;
&#13;
var data = [
  [{
    a: "b",
    value: 12
  }, {
    a: "bb",
    value: 39
  }, {
    a: "bb",
    value: 150
  }],
  [{
    a: "c",
    value: 15
  }, {
    a: "cc",
    value: 83
  }, {
    a: "ccc",
    value: 12
  }],
  [{
    a: "d",
    value: 55
  }, {
    a: "dd",
    value: 9
  }, {
    a: "dd",
    value: 1
  }]
];

console.log(
  data.reduce(function(arr, o) {
    o.forEach(function(v, i) {
      arr[i] = (arr[i] || 0) + v.value;
    });
    return arr;
  }, [])
)
&#13;
&#13;
&#13;

答案 1 :(得分:1)

&#13;
&#13;
data = [
     [{a: "b", value: 12}, {a: "bb", value: 39}, {a: "bb", value: 150}],
     [{a: "c", value: 15}, {a: "cc", value: 83}, {a: "ccc", value: 12}],
     [{a: "d", value: 55}, {a: "dd", value: 9}, {a: "dd", value: 1}]
   ];

// create an array with the appropriate size
var result = new Array(data[0].length);
// initialize it with 0s
result.fill(0);

data.forEach(function(sub){
  for(var i = 0; i < sub.length; i++)
    result[i] += sub[i].value;
});


console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

Reduce可能会给你带来一些性能,但是对于新手来说,将forEach加倍可以更容易理解并保持。

初始化只需要发生一次,因为你只使用整数(而不是双精度/浮点数),你可以使用按位OR来设置数字|0(代替{ {1}});速度各不相同,但通常用C语言来说速度更快。基于实现,JavaScript可能会变慢,但我只是将其作为当前存在的解决方案的替代方案。

&#13;
&#13;
||0
&#13;
&#13;
&#13;

  • let data = [ [{a: "b", value: 12}, {a: "bb", value: 39}, {a: "bb", value: 150}], [{a: "c", value: 15}, {a: "cc", value: 83}, {a: "ccc", value: 12}], [{a: "d", value: 55}, {a: "dd", value: 9}, {a: "dd", value: 1}] ]; let sum = []; data.forEach(arr=>{ arr.forEach((obj,i)=>{ sum[i] = (sum[i]|0) + obj.value; }) }); console.log(sum);arr数组
  • 中的第一层元素
  • data是每个元素数组的值;在这种情况下,它们是对象
  • obj是当前在范围内的对象的索引,这对于和的索引很重要

答案 3 :(得分:0)

使用两个for循环和index来增加值

var data = [
     [{a: "b", value: 12}, {a: "bb", value: 39}, {a: "bb", value: 150}],
     [{a: "c", value: 15}, {a: "cc", value: 83}, {a: "ccc", value: 12}],
     [{a: "d", value: 55}, {a: "dd", value: 9}, {a: "dd", value: 1}]
   ];

var result = [];

data.forEach(function(ele,ind){
  ele.forEach(function(innerEle,inde){
    if(!result[inde])
      result[inde] = 0;
    result[inde] += innerEle.value;
  })
});

console.log(result)