lodash计数独特的领域

时间:2016-05-20 13:15:59

标签: javascript arrays lodash

我有一个包含500个对象的数组,每个对象看起来像这样:

{name: 'Hello', phone_num: '1234'}

现在我想知道每个名字有多少。所以我希望将我的数组转换为以下内容:

[{name: 'Hello', count:15}, {name:'Marc', count:5}]

所以我想考虑使用lodash,但是看看他们的文档我还没有找到答案。

他们有一个名为countBy的东西,但它似乎不足以解决这个问题。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:10)

您可以使用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>');
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.12.0/lodash.js"></script>
&#13;
&#13;
&#13;

<强>更新

ES5版本将是:

var result = _(data)
  .groupBy('name')
  .map(function(items, name) { 
     return { name: name, count: items.length };
  }).value();

答案 1 :(得分:6)

我的版本:

var result = _(data)
  .countBy('name')
  .map((count, name) => ({ name, count }))
  .value();

答案 2 :(得分:1)

您可以使用:

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调用的返回分配给var或用它做任何你需要的事情