这是使用reduce
function一个伟大的地方:
的减少()方法应用于对一个储液器的功能和所述阵列的每一 值(从左到右)具有将其降低到单个值为。
...
减少一次执行回调函数对于每个本元件中 阵列,不含所述阵列中的孔,容纳四个参数: 初始值(或值从以前的回叫呼叫), 当前元素的值,当前索引以及发生迭代的阵列的值。
这将是这个样子:
var arr = [ { name: 'Suman',
game: '5A'
},
{ name: 'Suman',
game: '5A'
},
{ name: 'Namus',
game: '5A'
},
{ name: 'Namus',
game: '5A'
}
]
var counts = arr.reduce(function(counts, item) {
counts[item.name] = (counts[item.name] || 0) + 1;
return counts;
}, {});
counts
则是:
{ Suman: 2, Namus: 2 }
要求在评论:
如果我想要的合作在对象的数组像 [{name: 'Suman', count:'2'}, {name:'Namus', count:'2'}]
UNT以及名称。如果你已经有counts
从上面的reduce
电话,那么你就可以map
其按键到你想要的格式:
var countsArray = Object.keys(counts).map(function(name) {
return {name: name, count: counts[name]};
});
countsArray
然后:
[ { name: 'Suman', count: 2 },
{ name: 'Namus', count: 2 } ]
如果我想要计数以及像 [{name:'Suman',count:2},{name:'Namus',count:2}]对象的数组中的名称 – suman 2014-10-09 19:28:49
@suman我编辑我的回答,并增加了一种方法来做到这一点。 – 2014-10-09 19:43:25
谢谢队友,我从来没有明白过映射。你刚刚睁开眼睛。 – suman 2014-10-09 20:00:28