我有这样的数据:
[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
我不确定如何使用相同的索引添加每个值并将其推送到新数组
答案 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
}, [])
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;
答案 1 :(得分:1)
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;
答案 2 :(得分:1)
Reduce可能会给你带来一些性能,但是对于新手来说,将forEach加倍可以更容易理解并保持。
初始化只需要发生一次,因为你只使用整数(而不是双精度/浮点数),你可以使用按位OR来设置数字|0
(代替{ {1}});速度各不相同,但通常用C语言来说速度更快。基于实现,JavaScript可能会变慢,但我只是将其作为当前存在的解决方案的替代方案。
||0
&#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)