javascript - js对象数组相同属性合并值相加,不知道代码那里有问题

查看:579
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆