js获取对象数组中重复项的个数并排序

247 阅读2分钟

前言

在开发中,我们经常需要获取对象数组中每一项重复项的个数,并按照出现次数排序。这在处理数据时非常有用,可以让我们快速分析和可视化数据。本篇博客将介绍如何使用JavaScript实现这个功能。

遍历数组并统计次数

首先,我们需要遍历目标对象数组,并统计每个对象出现的次数。我们可以使用forEach()或for...of循环实现,对于每个对象,以其特定属性的值作为键,在一个空对象中查找相应的值。如果已经存在,则将其加1;否则,将其初始值设为1。代码示例:

const arr = [
  { id: 1, name: 'Tom' },
  { id: 2, name: 'Jerry' },
  { id: 3, name: 'Tom' },
  { id: 4, name: 'Lucy' },
  { id: 5, name: 'Jerry' }
];

const countObj = {};

arr.forEach((item) => {
  const key = item.name;
  if (countObj[key]) {
    countObj[key]++;
  } else {
    countObj[key] = 1;
  }
});

console.log(countObj); // {Tom: 2, Jerry: 2, Lucy: 1}

在这个例子中,我们使用forEach()方法遍历了包含5个对象的数组,并以name属性的值作为键,在countObj对象中查找相应的值。如果该值已经存在,则将其加1;否则,将其初始值设为1。最终,我们得到了一个包含每个人名出现次数的对象。

将次数排序并输出

接下来,我们需要将对象中的次数排序,并以某种格式输出。我们可以使用Object.entries()方法将对象转化为键值对数组,然后使用sort()方法按照值的大小升序或降序排列。最后,我们可以选择以表格、列表或其他方式输出结果。代码示例:

const countArr = Object.entries(countObj).sort((a, b) => b[1] - a[1]);

console.log(countArr); // [["Tom", 2], ["Jerry", 2], ["Lucy", 1]]

// 输出表格
console.table(countArr);

// 输出列表
countArr.forEach(([key, value]) => {
  console.log(`${key}: ${value}`);
});

在这个例子中,我们先使用Object.entries()方法将countObj对象转化成一个包含键值对的数组。然后,我们使用sort()方法按照出现次数降序排列。最后,我们可以选择以表格或列表形式输出结果。

总结

本篇博客介绍了如何使用JavaScript获取对象数组中每一项重复项的个数,并按照出现次数排序。通过使用forEach()方法遍历数组,以特定属性的值作为键,在一个空对象中统计每个对象出现的次数。然后,我们使用Object.entries()方法将对象转化成键值对数组,并使用sort()方法按照值的大小排序。最后,我们可以选择以表格或列表形式输出结果。