【问题标题】:Sort array item on the basis of frequency they are present Javascript [duplicate]根据它们出现的频率对数组项进行排序Javascript [重复]
【发布时间】:2021-02-06 16:46:41
【问题描述】:
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实现这一目标

【问题讨论】:

标签: javascript arrays sorting frequency


【解决方案1】:

使用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; }

【讨论】:

    【解决方案2】:

    使用三元运算符计算出现频率

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-10
      • 2020-08-26
      • 1970-01-01
      • 2011-04-04
      • 2020-11-16
      • 1970-01-01
      • 2021-07-28
      相关资源
      最近更新 更多