javascript - js对象数组相同属性合并值相加,不知道代码那里有问题
本文介绍了javascript - js对象数组相同属性合并值相加,不知道代码那里有问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
原始数据
var obj=[
{
date:"2017-08-11",
state:"上",
result:{"温度":4,"湿度":3},
},
{
date:"2017-08-11",
state:"上",
result:{"温度":4,"湿度":3}
},
{
date:"2017-08-11",
state:"下",
result:{"温度":2,"湿度":3}
},
{
date:"2017-08-10",
state:"下",
result:{"温度":5,"湿度":3}
}
];
希望得到的结果
var result=[
{
date:"2017-08-11",
state:"上",
result:{"温度":8,"湿度":6}
},
{
date:"2017-08-11",
state:"下",
result:{"温度":2,"湿度":3}
},
{
date:"2017-08-10",
state:"下",
result:{"温度":5,"湿度":3}
},
]
代码如下:
var temp=[];
for(var i=0;i<obj.length;i++){
// console.log(obj[i]);
var test={};
if(i+1<obj.length){
if(obj[i].date===obj[i+1].date && obj[i].state===obj[i+1].state){
test.date=obj[i].date;
test.state=obj[i].state;
test.result={};
for(var key in obj[i].result){
console.log(obj[i].result[key],obj[i+1].result[key]);
test.result[key]=obj[i].result[key]+obj[i+1].result[key];
}
temp.push(test)
i++;
}else{
test.date=obj[i].date;
test.state=obj[i].state;
test.result=obj[i].result;
temp.push(test)
}
}
}
运行之后的结果只有两个,少了最后一个,不知道问题出在那里?还望大神指点
解决方案
var obj=[
{
date:"2017-08-11",
state:"上",
result:{"温度":4,"湿度":3},
},
{
date:"2017-08-11",
state:"上",
result:{"温度":4,"湿度":3}
},
{
date:"2017-08-11",
state:"下",
result:{"温度":2,"湿度":3}
},
{
date:"2017-08-10",
state:"下",
result:{"温度":5,"湿度":3}
}
];
var temp = [];
obj.forEach(function(item, index) {
var skey = item.date + item.state;
if(typeof temp[skey] == "undefined") {
temp[skey] = item;
} else {
for(var k in item.result) {
temp[skey]["result"][k] += item["result"][k];
}
//temp[skey]["result"]["温度"] += item["result"]["温度"];
//temp[skey]["result"]["湿度"] += item["result"]["湿度"];
}
});
var result = [];
for(var i in temp) {
result.push(temp[i]);
}
console.log(result);
试着写了下感觉代码挺麻烦.
这篇关于javascript - js对象数组相同属性合并值相加,不知道代码那里有问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文