javascript - 计算 JavaScript 数组中对象的出现次数

标签 javascript arrays object count lodash

我有一个像这样的对象数组:

arrayOfObjs = [{1:"h"}, {1:"h"}, {2:"h"}, {3:"ha"}, {4:"haa"}, {4:"haa"}, {4:"haa"}]

我想计算每个对象的出现次数,并将结果返回到排序的、可迭代的数据结构中,如下所示:

{
  {4:"haa"}: 3,
  {1:"h"}: 2,
  {2:"h"}: 1,
  {3:"ha"}: 1
}

键甚至可以位于数组中。 我尝试在 arrayOfObjs 上使用 Lodash 的 countBy 函数。然而,这仅仅导致了

{[object Object]:5}

我可以使用任何库/函数来完成这项工作吗?类似于Python的计数器

更新

作为替代方案,我尝试像这样组织数组:

array = [[1,"h"], [1,"h"], [2,"h"], [3,"ha"], [4,"haa"], [4,"haa"], [4,"haa"]];

再次使用Lodash的countBY函数,我的结果是:

{1,h: 2, 2,h: 1, 3,ha: 1, 4,haa: 3}

好一点,但我现在必须使用正则表达式来分割对象的每个键,因为“1,h”是一个字符串。不理想:(

理想情况,我希望我的键是对象、数组或类似的东西。

最佳答案

无耻的插头:

我正在开发一个名为 Pro.js 的库它有一个集合模块,可以完成各种巧妙的事情。可枚举类有一个 .groupBy() 方法,该方法在这里特别有用。

var arrayOfObjs = [{1:"h"}, {1:"h"}, {2:"h"}, {3:"ha"}, {4:"haa"}, {4:"haa"}, {4:"haa"}];
var enumerable = pro.collections.asEnumerable(arrayOfObjs);
var grouped = enumerable.groupBy(function(o) {
    return JSON.stringify(o);
});
var composites = grouped.select(function(g) {
    return {
        key: g[0],
        count: g.length,
        group: g
    };
});
var output = composites.toArray();

您可以前往Pro.js GitHub Page并使用您的开发人员工具来测试该库。运行我在页面答案中发布的代码片段,看看它是否会产生适合您的结果。

关于javascript - 计算 JavaScript 数组中对象的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35250461/

相关文章:

javascript - 如何使 react 引导表中的列可单击并避免将其显示为 "Add Row"中的文本字段?

JavaScript RegExp 在 IE11 中不工作,在 Chrome 中工作

c - 试图理解 Knuth 的排列算法

r - 是否可以在 R 中定义具有自己方法的对象类

javascript - 属性值不能在 javascript 中取消定义

javascript - 如何仅在每个 JSON 对象中获取第一个值

javascript - 如何使用 AngularJS 客户端在 Loopback 应用程序内创建 session ?

javascript - 单击按钮(更改文本)时显示隐藏的 div(幻灯片)

arrays - 如何将连续值复制到数组

java - 如何查找一个数字是否包含在java中的数字范围数组中