首页 > 解决方案 > 根据它们出现的频率对数组项进行排序 Javascript

问题描述

Input: [2,1,9,1,2,5,1,6,1]

Output: [5,6,9,2,2,1,1,1,1]

按照上面的转换。

如果频率相同,则要保持升序,即 5、6、9 具有相同的频率,即 1,因此它们按升序添加,然后是 2(频率 2)和 1(频率 4)。

请帮助如何使用javascript实现这一点

标签: javascriptarrayssortingfrequency

解决方案


使用为对象累加器中的每个数字创建一个频率对象array#reduce,然后根据此对象对数组进行排序,对于具有相同频率的数字,按它们的值对它们进行排序。

const arr = [2,1,9,1,2,5,1,6,1],
      frequency = arr.reduce((r,v) => {
        r[v] = (r[v] || 0) + 1;
        return r;
      }, {});
arr.sort((a,b) => frequency[a] - frequency[b] || a - b);
console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读