首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算Javascript数组中对象的重复次数

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

Stack Overflow用户
提问于 2017-04-27 22:08:37
回答 3查看 157关注 0票数 2

我有一个数组:

代码语言: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'}
];

如您所见,这个对象:

代码语言:javascript
复制
{class: 'class-21', team: 'xmsqmd'}

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

代码语言:javascript
复制
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]
]

因此,新的数组应该是一个2d数组,第一个值是对象,第二个值是重复的时间。

预先谢谢,我已经搜索过了,但我只找到了一个解决方案,结果是一个数组,其中一个对象的键是已压缩的对象。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-27 22:21:12

可能的解决办法。

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

代码语言: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'
  }],
  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>');

票数 5
EN

Stack Overflow用户

发布于 2017-04-27 22:58:51

我们可以在两个循环中简化解决方案:

代码语言: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'}
];

var res = [];
var obj = {};
//construct the object with key and recurrence count as value
arr.forEach(function(value, i) {
    var str = JSON.stringify(value);
	if(!obj[str]) {
		obj[str] = 1;
    } else {
		obj[str]++;
    }
});
//Format the data in the desired output
for(var i in obj) {
	var tempArr = [JSON.parse(i)];
	tempArr.push(obj[i]);
	res.push(tempArr);
}

console.log(res);

票数 0
EN

Stack Overflow用户

发布于 2017-04-27 22:20:29

您可以使用forEach

代码语言:javascript
复制
newArr = {}

arr.forEach(function(obj) {
    var key = JSON.stringify(obj)
    newArr[key] = (newArr[key] || 0) + 1
})

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43668713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档