js数组对象筛选出重复数据 并计算 重复了几次
例如:
把以下数据
let arr = [
{kuaidizhandian:'顺丰快递'},
{kuaidizhandian:'邮政快递'},
{kuaidizhandian:'顺丰快递'}
]
转换为
kuaidarr = [
{kuaidizhandian:'顺丰快递',num:2},
{kuaidizhandian:'邮政快递',num:1},
]
完整的代码示例:
const countObj = {};
arr.forEach((item1) => {
const key = item1.kuaidizhandian;
if (countObj[key]) {
countObj[key]++;
} else {
countObj[key] = 1;
}
});
const countArr = Object.entries(countObj).sort((a, b) => b[1] - a[1]);
// 输出列表
countArr.forEach(([key, value]) => {
kuaidarr.push({
kuaidizhandian:key,
num:value
});
console.log(`${key}: ${value}`);
});
console.log(kuaidarr) // [ {kuaidizhandian:'顺丰快递',num:2},{kuaidizhandian:'邮政快递',num:1}, ]
实现思路:
遍历数组并统计次数
首先,我们需要遍历目标对象数组,并统计每个对象出现的次数。我们可以使用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()方法按照值的大小排序。最后,我们可以选择以表格或列表形式输出结果。