【问题标题】:JavaScript function returning unique values sorted by countJavaScript 函数返回按计数排序的唯一值
【发布时间】:2012-03-06 00:37:24
【问题描述】:

我正在寻找一个简洁的 JavaScript 函数,它接受一些值并返回按出现次数排序的唯一值,最频繁的在前。

例如,如果输入是数组[3,2,2,2,2,1,2,1],那么输出应该是[2,1,3]

【问题讨论】:

  • 看完之后,开始实施:)
  • 你指的还有哪些收藏?只有对象 ({}) 和数组 ([]),我不确定您如何将其应用于对象。
  • 你可能是对的,我没想那么多,我已经从原始问题中删除了那些东西。

标签: javascript sorting collections count unique


【解决方案1】:
var data=[3,2,2,2,2,1,2,1];
console.log(countUnique(data));

function countUnique(data){
  var count={};
  $(data).each(function(index){                      
       count[data[index]] = count[data[index]]+1 || 1;             
  });
  return count;
}

output="对象 {1: 2, 2: 5, 3: 1}"

这也适用于字符串。

可以使用以下循环读取输出

   for(var key in count)
    {
             console.log(key); // prints the index of the array
             console.log(count[key]); //prints the number of occurrences  

    }

【讨论】:

    【解决方案2】:

    这是我的第一次尝试。我敢打赌我们可以让它变得更简单,但这似乎还可以。

     function fancyUnique(arr) {
    
       var counts = {}; // store counts for each value
       var fancy = []; // put final results in this array
       var count = 0; // initialize count
    
       // create counts object to store counts for each value of arr
       for (var i = 0; i < arr.length; i++) {
         count = counts[arr[i]] || 0;  // use existing count or start at 0
         count++; // increment count
         counts[arr[i]] = count; // update counts object with latest count
       }
    
       // take all keys from counts object and add to array
       // also: object keys are string, so must parseInt()
       for (var key in counts) {
         fancy.push(parseInt(key, 10)); 
       }
    
       // sort results array in highest to lowest order
       return fancy.sort(function(a, b) { 
         return counts[b] - counts[a]; 
       })
     }
    
    
    fancyUnique([22,22,1,1,1,1]) // [ 1, 22 ]
    

    【讨论】:

    • 我喜欢。我实际上看不到任何改进它的方法。您是从头开始编写的还是从您的库中编写的? :)
    • 有点神秘,例如count = uniques[arr[i]] || 0; 行发生了什么,请您添加一些 cmets
    • 我会添加评论。它基本上只是说如果还没有特定值的计数,则将其初始化为 0。
    • Mm... stacksort 把这个:[[5,8,4,9], [12,32,6,5,8], [4,2]] 变成了这个:[5,12,4] 使用这个答案。有点奇怪。
    • 在阵列 [1, 2, 3, 4, 1, 4, 32, 1, 3, 1, 1.0004, 5.03274, 2.93456e27, 2.93456e27, 2.93456e39, 0, 1] 上失败,输出应该是 [1, 3, 4, 2.93456e27, 2, 3, 32, 1.0004, 5.03274, 2.93456e39, 0],而是 [1,1,3,4,0,2,32,5,2,2]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2019-02-18
    • 1970-01-01
    • 2023-01-08
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多