如何处理对象集合中的数据?

沃尔特鲁丁

现在,在我的对象集合中,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 

这显示了这三天安和鲍勃吃了多少苹果

我想知道如何获得输出。

阿内尔·巴拉恩(Arnelle Balane)

您可以使用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.keysArray.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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章