Mar*_*sen 5 javascript arrays lodash
我有一个500个对象的数组,每个对象看起来像这样:
{name: 'Hello', phone_num: '1234'}
Run Code Online (Sandbox Code Playgroud)
现在我想知道每个名字有多少.所以我希望将我的数组转换为以下内容:
[{name: 'Hello', count:15}, {name:'Marc', count:5}]
Run Code Online (Sandbox Code Playgroud)
所以我希望考虑使用lodash这个,但看着他们的文档我还没有找到答案.
他们有一些东西,countBy但它似乎不足以解决这个问题.
谁能帮我吗?
rye*_*lar 11
您可以使用groupBy()按名称对它们进行分组,然后map()每个分组的项目以返回必要的计数和名称.
var result = _(data)
.groupBy('name')
.map((items, name) => ({ name, count: items.length }))
.value();
Run Code Online (Sandbox Code Playgroud)
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>');Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.js"></script>Run Code Online (Sandbox Code Playgroud)
更新:
ES5版本将是:
var result = _(data)
.groupBy('name')
.map(function(items, name) {
return { name: name, count: items.length };
}).value();
Run Code Online (Sandbox Code Playgroud)
我的版本:
var result = _(data)
.countBy('name')
.map((count, name) => ({ name, count }))
.value();
Run Code Online (Sandbox Code Playgroud)