我有一个包含 500 个对象的数组,每个对象如下所示:
{name: 'Hello', phone_num: '1234'}
现在我想知道每个名字有多少个。所以我希望将我的数组转换为以下内容:
[{name: 'Hello', count:15}, {name:'Marc', count:5}]
所以我想考虑为此使用 lodash
但查看他们的文档我无法找到答案。
他们有一个叫做 countBy
的东西,但它似乎不足以解决这个问题。
谁能帮帮我?
最佳答案
您可以使用 groupBy()按名称分组,然后 map()每个分组的项目返回必要的计数和名称。
var result = _(data)
.groupBy('name')
.map((items, name) => ({ name, count: items.length }))
.value();
var data = [
{ name: 'Hello', phone_num: '1234'},
{ name: 'Hello', phone_num: '1234'},
{ name: 'Hello', phone_num: '1234'},
{ name: 'Hello', phone_num: '1234'},
{ name: 'Hello', phone_num: '1234'},
{ name: 'Hello', phone_num: '1234'},
{ name: 'Hello', phone_num: '1234'},
{ name: 'Marc', phone_num: '5432'},
{ name: 'Marc', phone_num: '5432'},
{ name: 'Marc', phone_num: '5432'},
{ name: 'Marc', phone_num: '5432'},
{ name: 'Marc', phone_num: '5432'},
{ name: 'Marc', phone_num: '5432'},
{ name: 'Marc', phone_num: '5432'},
{ name: 'Marc', phone_num: '5432'},
{ name: 'Sam', phone_num: '76532'},
{ name: 'Sam', phone_num: '76532'},
{ name: 'Sam', phone_num: '76532'},
{ name: 'Sam', phone_num: '76532'}
];
var result = _(data)
.groupBy('name')
.map((items, name) => ({ name, count: items.length }))
.value();
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.js"></script>
更新:
ES5 版本为:
var result = _(data)
.groupBy('name')
.map(function(items, name) {
return { name: name, count: items.length };
}).value();
关于javascript - lodash 字段的唯一计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37347714/