lodash 字段的唯一计数
lodash count unique of field
我有一个包含 500 个对象的数组,每个对象如下所示:
{name: 'Hello', phone_num: '1234'}
现在我想知道每个名字有多少个。所以我希望将我的数组转换为以下内容:
[{name: 'Hello', count:15}, {name:'Marc', count:5}]
所以我想考虑为此使用 lodash
但查看他们的文档我无法找到答案。
他们有一个叫做 countBy
的东西,但它似乎不足以解决这个问题。
谁能帮帮我?
您可以使用 groupBy() to group them by name and then map() 每个分组的项目来 return 必要的数量和名称。
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();
我的版本:
var result = _(data)
.countBy('name')
.map((count, name) => ({ name, count }))
.value();
您可以使用:
const data = [{name: 'Hello', phone:15}, {name:'Marc', phone:5}, {name: 'Hello', phone:10}];
const names = _.countBy(data, 'name');
Object.keys(names).map(x => ({name: x, count: names[x]}));
ES5代码:
var data = [{name: 'Hello', phone:15}, {name:'Marc', phone:5}, {name: 'Hello', phone:10}];
var names = _.countBy(data, 'name');
Object.keys(names).map(function(x) {
return {
name: x,
count: names[x]
};
});
然后你可以将 Object.keys
调用的 return 分配给一个 var 或用它做任何你想做的事情
我有一个包含 500 个对象的数组,每个对象如下所示:
{name: 'Hello', phone_num: '1234'}
现在我想知道每个名字有多少个。所以我希望将我的数组转换为以下内容:
[{name: 'Hello', count:15}, {name:'Marc', count:5}]
所以我想考虑为此使用 lodash
但查看他们的文档我无法找到答案。
他们有一个叫做 countBy
的东西,但它似乎不足以解决这个问题。
谁能帮帮我?
您可以使用 groupBy() to group them by name and then map() 每个分组的项目来 return 必要的数量和名称。
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();
我的版本:
var result = _(data)
.countBy('name')
.map((count, name) => ({ name, count }))
.value();
您可以使用:
const data = [{name: 'Hello', phone:15}, {name:'Marc', phone:5}, {name: 'Hello', phone:10}];
const names = _.countBy(data, 'name');
Object.keys(names).map(x => ({name: x, count: names[x]}));
ES5代码:
var data = [{name: 'Hello', phone:15}, {name:'Marc', phone:5}, {name: 'Hello', phone:10}];
var names = _.countBy(data, 'name');
Object.keys(names).map(function(x) {
return {
name: x,
count: names[x]
};
});
然后你可以将 Object.keys
调用的 return 分配给一个 var 或用它做任何你想做的事情