javascript将对象数组的数组和在一起

javascript将对象数组的数组和在一起,javascript,Javascript,我有一个数组,格式如下 [ [{year:2015, value:23000, value1:1000},{year:2016,value:1000, value1:2000},{year:2017,value:400, value1:3000}], [{year:2015, value:10000, value1:1000},{year:2016,value:2000, value1:3000},{year:2017,value:500, value1:2000}], ] 我想把它们加起来,

我有一个数组,格式如下

[
[{year:2015, value:23000, value1:1000},{year:2016,value:1000, value1:2000},{year:2017,value:400, value1:3000}],
[{year:2015, value:10000, value1:1000},{year:2016,value:2000, value1:3000},{year:2017,value:500, value1:2000}],
]
我想把它们加起来,在这个例子中,我想

[{year:2015,value:33000, value1:2000},{year:2016,value:3000, value1:5000},{year:2017,value:900, value1:5000}]

如果阵列中只有两个阵列,但较大的阵列中可能有更多阵列。我怎样才能做到这一点?目前,我还不能想出一个好的方法。谢谢

您可以在地图/对象中循环项目并在年数(键)中添加值

var data = [
[{year:2015, value:23000},{year:2016,value:1000},{year:2017,value:400}],
[{year:2015, value:10000},{year:2016,value:2000},{year:2017,value:500}],
];

var output = {};

data.forEach(function(item) {
  item.forEach(function(obj) {
    output[obj.year] = (output[obj.year] || 0) + obj.value;
  });
});
output = [output]

console.log(output);
一种方法是首先展平此二维阵列

var output = {};
var flatArray = data.reduce(function(a, b) {
  return a.concat(b);
}, []);

flatArray.forEach(function(obj) {
  output[obj.year] = (output[obj.year] || 0) + obj.value;
});

output = [output]
console.log(output);
输出:[{ 2015: 33000, 2016: 3000, 2017: 900 }]


您可以在项目上循环,并在地图/对象中的年号(键)上添加值

var data = [
[{year:2015, value:23000},{year:2016,value:1000},{year:2017,value:400}],
[{year:2015, value:10000},{year:2016,value:2000},{year:2017,value:500}],
];

var output = {};

data.forEach(function(item) {
  item.forEach(function(obj) {
    output[obj.year] = (output[obj.year] || 0) + obj.value;
  });
});
output = [output]

console.log(output);
一种方法是首先展平此二维阵列

var output = {};
var flatArray = data.reduce(function(a, b) {
  return a.concat(b);
}, []);

flatArray.forEach(function(obj) {
  output[obj.year] = (output[obj.year] || 0) + obj.value;
});

output = [output]
console.log(output);
输出:[{ 2015: 33000, 2016: 3000, 2017: 900 }]

ECMAScript 5解决方案:

var-arr=[
[{年份:2015年,价值:23000,价值1:1000},{年份:2016年,价值:1000,价值1:2000},{年份:2017年,价值:400,价值1:3000}],
[{年份:2015,价值:10000,价值1:1000},{年份:2016,价值:2000,价值1:3000},{年份:2017,价值:500,价值1:2000}]
],
//每年的总价值`
年份=arr.reduce(功能(r,a){
a、 forEach(函数(o){
y=o年;
if(Array.isArray(r[y])){
r[y][0]+=o.值;
r[y][1]+=o.value1;
}否则{
r[y]=[o.value,o.value1];
}
});
返回r;
}, {}),
//构建结果数组,其中包含总计为'year'的对象
结果=对象。键(年)。映射(函数(y){
返回{year:y,value:years[y][0],value1:years[y][1]};
});
控制台日志(结果)ECMAScript 5解决方案:

var-arr=[
[{年份:2015年,价值:23000,价值1:1000},{年份:2016年,价值:1000,价值1:2000},{年份:2017年,价值:400,价值1:3000}],
[{年份:2015,价值:10000,价值1:1000},{年份:2016,价值:2000,价值1:3000},{年份:2017,价值:500,价值1:2000}]
],
//每年的总价值`
年份=arr.reduce(功能(r,a){
a、 forEach(函数(o){
y=o年;
if(Array.isArray(r[y])){
r[y][0]+=o.值;
r[y][1]+=o.value1;
}否则{
r[y]=[o.value,o.value1];
}
});
返回r;
}, {}),
//构建结果数组,其中包含总计为'year'的对象
结果=对象。键(年)。映射(函数(y){
返回{year:y,value:years[y][0],value1:years[y][1]};
});

控制台日志(结果)这里有一个有效的解决方案。这会满足你的需求。希望有帮助

var-arr=[
[{年份:2015年,价值:23000,价值1:1000},{年份:2016年,价值:1000,价值1:2000},{年份:2017年,价值:400,价值1:3000}],
[{年份:2015年,价值:10000,价值1:1000},{年份:2016年,价值:2000,价值1:3000},{年份:2017年,价值:500,价值1:2000}],
]
var结果=[];
对于(var i=0;i控制台日志(结果)这里有一个有效的解决方案。这会满足你的需求。希望有帮助

var-arr=[
[{年份:2015年,价值:23000,价值1:1000},{年份:2016年,价值:1000,价值1:2000},{年份:2017年,价值:400,价值1:3000}],
[{年份:2015年,价值:10000,价值1:1000},{年份:2016年,价值:2000,价值1:3000},{年份:2017年,价值:500,价值1:2000}],
]
var结果=[];
对于(var i=0;i控制台日志(结果)您可以使用哈希表来收集单个年份,并使用嵌套方法来迭代给定对象的所有属性

然后创建新属性并添加实际值

它可以处理任意数量的属性

var数据=[{年份:2015,值:23000,值1:1000},{年份:2016,值:1000,值1:2000},{年份:2017,值:400,值1:3000}],{年份:2015,值:10000,值1:1000},{年份:2016,值:2000,值1:3000},{年份:2017,值:500,值1:2000}],
结果=数据.reduce(函数(散列){
返回函数(r,a){
a、 forEach(函数(o){
如果(!哈希[o.year]){
hash[o.year]={year:o.year};
r、 推送(哈希[o.year]);
}
Object.keys(o).forEach(函数(k){
如果(k!=‘年’){
散列[o.year][k]=(散列[o.year][k]| | 0)+o[k];
}
});
});
返回r;
};
}(Object.create(null)),[]);
控制台日志(结果)

。作为控制台包装器{max height:100%!important;top:0;}
您可以使用哈希表收集一年,并使用嵌套方法对数组迭代给定对象的所有属性

然后创建新属性并添加实际值

它可以处理任意数量的属性

var数据=[{年份:2015,值:23000,值1:1000},{年份:2016,值:1000,值1:2000},{年份:2017,值:400,值1:3000}],{年份:2015,值:10000,值1:1000},{年份:2016,值:2000,值1:3000},{年份:2017,值:500,值1:2000}],
结果=数据.reduce(函数(散列){
返回函数(r,a){
a、 forEach(函数(o){
如果(!哈希[o.year]){