javascript - 计算 Javascript 数组中对象的重复次数

标签 javascript

我有这个数组:

var arr = [
  {class: 'class-1', team: 'abcdef'},
  {class: 'class-21', team: 'xmsqmd'},
  {class: 'class-4', team: 'xaksjs'},
  {class: 'class-21', team: 'xmsqmd'},
  {class: 'class-5', team: 'asioda'},
  {class: 'class-44', team: 'csdcsw'}
];

如您所见,该对象:

{class: 'class-21', team: 'xmsqmd'}

重复2次。无论如何,这只是一个示例,但我需要创建另一个应该如下所示的数组:

newArr = [
  [{class: 'class-1', team: 'abcdef'}, 1],
  [{class: 'class-21', team: 'xmsqmd'}, 2],
  [{class: 'class-4', team: 'xaksjs'}, 1],
  [{class: 'class-5', team: 'asioda'}, 1],
  [{class: 'class-44', team: 'csdcsw'}, 1]
]

所以新数组应该是一个二维数组,第一个值是对象,第二个值是它的重复次数。

预先感谢,我已经搜索过,但我只找到了一个解决方案,结果是一个带有对象的数组,其键是字符串化对象。

最佳答案

可能的解决方案。

  • 使用Array#forEach创建一个哈希对象,其中每个元素作为key,并且它在arr数组中出现的次数
  • 使用Array#map映射哈希对象,从原始数组中获取指定对象及其在哈希对象中出现的次数。
  • 按出现次数降序对对象进行排序。

var arr = [{
    class: 'class-1',
    team: 'abcdef'
  }, {
    class: 'class-21',
    team: 'xmsqmd'
  }, {
    class: 'class-4',
    team: 'xaksjs'
  }, {
    class: 'class-21',
    team: 'xmsqmd'
  }, {
    class: 'class-5',
    team: 'asioda'
  }, {
    class: 'class-44',
    team: 'csdcsw'
  }],
  hash = arr.map(v => v.class),
  obj = {};
  
  hash.forEach(v => !obj[v] ? obj[v] = 1 : obj[v]++);
  var res = Object.keys(obj).map(v => [Object.assign({}, arr.find(c => c.class == v)), obj[v]])
                            .sort((a,b) => b[1] - a[1]);

  document.write('<pre>' + JSON.stringify(res, null, 2) + '</pre>');

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

相关文章:

Javascript 作用域与 asp.net

javascript - JavaScript 中 Uint8Array 到图像

javascript - 为什么这种将 html 表单信息下载为 string/.txt 文件的方法会从文件中删除所有换行符?

javascript - JQuery 不适用于创建后的元素

Javascript:如果屏幕打开则更改属性在三星上不起作用。想法如何解决这个问题?

javascript - MeteorJS 计算集合中存在多少相同数据

javascript - Firefox 扩展未运行内容脚本

javascript - 如何将此自定义对象添加到 firebase

javascript - Angular.js 仅加载一半时间

javascript - 必应 map v7.方向管理器: callback with parameters