现在,在我的对象集合中,obj:
{date:2015/9/11,name:Ann,apple:1},
{date:2015/9/12,name:Ann,apple:0},
{date:2015/9/13,name:Ann,apple:1},
{date:2015/9/11,name:Bob,apple:1},.....
我这样打印出来:
2015/9/11 Ann 1
2015/9/12 Ann 0
2015/9/13 Ann 1
2015/9/11 Bob 1
2015/9/12 Bob 1
2015/9/13 Bob 1
这是我的代码
var index, objLen
for (index = 0, objLen = obj.length; index<objLen; ++index){
console.log(obj[index].date +'\t'+ obj[index].name +'\t'+ result[index].apple)
}
我希望输出:
2015/9/13 Ann 2
2015/9/13 Bob 3
这显示了这三天安和鲍勃吃了多少苹果
我想知道如何获得输出。
您可以使用Array.prorotype.reduce
合并具有相同内容的项目name
,并将结果存储在对象中。
var obj = [
{ date: '2015/9/11', name: 'Ann', apple: 1 },
{ date: '2015/9/12', name: 'Ann', apple: 0 },
{ date: '2015/9/13', name: 'Ann', apple: 1 },
{ date: '2015/9/11', name: 'Bob', apple: 1 },
{ date: '2015/9/12', name: 'Bob', apple: 2 },
{ date: '2015/9/13', name: 'Bob', apple: 1 }
];
var merged = obj.reduce(function(merged, item) {
if (!merged.hasOwnProperty(item.name)) {
merged[item.name] = { date: item.date, name: item.name, apple: 0 };
}
merged[item.name].date = item.date;
merged[item.name].apple += item.apple;
return merged;
}, {});
// merged == {
// Ann: { date: '2015/9/13', name: 'Ann', apple: 2 },
// Bob: { date: '2015/9/13', name: 'Bob', apple: 4 }
// }
但这会导致一个以人的名字为键的对象。如果你要转换这一回合并项目的数组,你可以可以使的值的数组了merged
使用的组合对象Object.keys
和Array.prototype.map
:
merged = Object.keys(merged).map(function(item) {
return merged[item];
});
// merged == [
// { date: '2015/9/13', name: 'Ann', apple: 2 },
// { date: '2015/9/13', name: 'Bob', apple: 4 }
// ]
然后,您现在可以使用代码来打印出此数组的元素。
请参考以下链接,以了解有关此解决方案中使用的不同方法的更多信息:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句