一个人如何处理一个javascript对象数组,例如:
my objArr = [ {key:Mon Sep 23 2013 00:00:00 GMT-0400, val:42}, {key:Mon Sep 24 2013 00:00:00 GMT-0400, val:78}, {key:Mon Sep 25 2013 00:00:00 GMT-0400, val:23}, {key:Mon Sep 23 2013 00:00:00 GMT-0400, val:54}]
并通过将值相加来合并重复的键。为了得到这样的东西:
my reducedObjArr = [ {key:Mon Sep 23 2013 00:00:00 GMT-0400, val:96}, {key:Mon Sep 24 2013 00:00:00 GMT-0400, val:78}, {key:Mon Sep 25 2013 00:00:00 GMT-0400, val:23}]
我尝试迭代并添加到新数组,但这没有用:
var reducedObjArr = []; var item = null, key = null; for(var i=0; i<objArr.length; i++) { item=objArr[i]; key = Object.keys(item)[0]; item=item[key]; if(!result[key]){ result[key] = item; }else{ result[key] += item;} }a
您应该使用属性将未找到的每个对象分配给结果.key。
.key
如果找到它,则需要添加它.val。
.val
var temp = {}; var obj = null; for(var i=0; i < objArr.length; i++) { obj=objArr[i]; if(!temp[obj.key]) { temp[obj.key] = obj; } else { temp[obj.key].val += obj.val; } } var result = []; for (var prop in temp) result.push(temp[prop]);
另外,部分问题是您正在重用item变量来引用的值.key,因此您失去了对该对象的引用。
item