已实现数组去重,如何让重复次数最多元素置于新数组首位?
数组去重并优先排列重复次数最多的元素
要实现去重后让重复次数最多的元素排在首位,需要先统计元素的出现频率,再基于频率排序去重后的数组,具体步骤如下:
1. 统计元素出现次数
使用reduce遍历原数组,生成一个记录每个元素出现次数的对象:
const source = [2, 9, 9, 1, 6]; const countMap = source.reduce((acc, item) => { acc[item] = (acc[item] || 0) + 1; return acc; }, {});
执行后countMap的值为{2:1, 9:2, 1:1, 6:1}。
2. 去重并按频率排序
可以选择两种去重方式,再结合频率排序:
方式一:使用Set去重(简洁高效)
const ans = [...new Set(source)].sort((a, b) => countMap[b] - countMap[a]); console.log(ans); // 输出 [9, 2, 1, 6]
new Set(source)会保留元素在原数组中首次出现的顺序,sort方法通过对比两个元素的出现次数,让次数多的元素排在前面。
方式二:沿用你原有的filter去重逻辑
const uniqueArr = source.filter((item, index, arr) => arr.indexOf(item) === index); const ans = uniqueArr.sort((a, b) => countMap[b] - countMap[a]); console.log(ans); // 输出 [9, 2, 1, 6]
效果和方式一完全一致,只是保留了你原本的去重写法。
补充说明
如果存在多个元素出现次数相同的情况(比如原数组是[2,2,9,9,1,6]),排序后会保持它们在原数组中首次出现的顺序,最终输出顺序由元素首次出现的位置决定。
内容的提问来源于stack exchange,提问作者Avilash Chak
相关产品推荐
相关产品推荐

