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 或用它做任何你想做的事情