Javascript 根据出现的频率对数组项进行排序

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

遵循上述转换

如果频率保持相同的升序,即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.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);
}