我有一个像这样的对象数组:
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/