lodash计数独特的领域

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)


Ale*_*Ten 8

我的版本:

var result = _(data)
  .countBy('name')
  .map((count, name) => ({ name, count }))
  .value();
Run Code Online (Sandbox Code Playgroud)