Javascript 根据出现的频率对数组项进行排序
遵循上述转换 如果频率保持相同的升序,即5,6,9具有相同的频率,即1,因此它们按升序相加,然后是2(频率2)和1(频率4)Javascript 根据出现的频率对数组项进行排序,javascript,arrays,sorting,frequency,Javascript,Arrays,Sorting,Frequency,遵循上述转换 如果频率保持相同的升序,即5,6,9具有相同的频率,即1,因此它们按升序相加,然后是2(频率2)和1(频率4) 请帮助了解如何使用javascript实现这一点,使用数组#reduce为对象累加器中的每个数字创建一个频率对象,然后根据此对象对数组进行排序,对于具有相同频率的数字,请根据其值对其进行排序 const arr=[2,1,9,1,2,5,1,6,1], 频率=arr.reduce((r,v)=>{ r[v]=(r[v]| | 0)+1; 返回r; }, {}); arr
请帮助了解如何使用javascript实现这一点,使用
数组#reduce
为对象累加器中的每个数字创建一个频率对象,然后根据此对象对数组进行排序,对于具有相同频率的数字,请根据其值对其进行排序
const arr=[2,1,9,1,2,5,1,6,1],
频率=arr.reduce((r,v)=>{
r[v]=(r[v]| | 0)+1;
返回r;
}, {});
arr.sort((a,b)=>频率[a]-频率[b]| a-b);
控制台日志(arr)代码>
.as控制台包装{max height:100%!important;top:0;}
使用三元运算符计算出现频率
Input: [2,1,9,1,2,5,1,6,1]
Output: [5,6,9,2,2,1,1,1,1]
这回答了你的问题吗?
function sortByFrequency(myArray){
var arr = [];
var frequency = {};
var i=myArray.length-1;
for (var i;i>-1;i--){
var tmp = myArray[i];
frequency[tmp]==null?frequency[tmp]=1:frequency[tmp]++;
}
for (var tmp in frequency){
arr.push(tmp);
}
function FreqCompare(x,y){
return frequency[y]-frequency[x];
}
return arr.sort(FreqCompare);
}