oco*_*mfd 0 javascript arrays sorting
例如,假设我有一个数组:[3,2,2,1,4,5,3,2,2,1,1],我想将其排序为这种形式:
[2,2,2,2,1,1,1,3,3,4,5]
Run Code Online (Sandbox Code Playgroud)
哪个2是最常见的元素,然后是1,依此类推,我该如何编写一个sort函数:
let arr=[3,2,2,1,4,5,3,2,2,1,1];
arr.sort(function(p0,p1){
//how to write it?
});
Run Code Online (Sandbox Code Playgroud)
要做到这一点?
我试过了:
let arr=[3,2,2,1,4,5,3,2,2,1,1];
let numPosMap=new Map();
for(let i=0;i<arr.length;i++){
let num=arr[i];
if(!numPosMap[num]){
numPosMap[num]=[];
}
numPosMap[num].push(i);
}
let posArrayArray=[];
for(let num in numPosMap) {
posArrayArray.push(numPosMap[num]);
}
posArrayArray.sort(function(a,b){
return a.length<b.length;
});
let resultArr=[];
for(let posArray of posArrayArray){
for(let pos of posArray){
resultArr.push(pos);
}
}
Run Code Online (Sandbox Code Playgroud)
有多行代码,有没有更简单的方法?
我的建议是创建另一个对象来计算每个元素在数组中出现的数量.一旦你有了,你可以通过比较每个元素的数量来排序.
例:
let arr = [3, 2, 2, 1, 4, 5, 3, 2, 2, 1, 1];
// Do some preprocessing first...
let counts = arr.reduce((counts, num) => {
counts[num] = (counts[num] || 0) + 1;
return counts;
}, {});
console.log(counts);
arr.sort(function(p0,p1){
return counts[p1] - counts[p0];
});
console.log(arr);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |