Функция JavaScript, возвращающая уникальные значения, отсортированные по количеству - PullRequest
2 голосов
/ 14 февраля 2012

Я ищу краткую функцию JavaScript, которая принимает некоторые значения и возвращает уникальные значения, отсортированные по количеству вхождений, наиболее часто встречающиеся вначале.

Например, если входными данными является массив [3,2,2,2,2,1,2,1]тогда вывод должен быть [2,1,3].

Ответы [ 2 ]

17 голосов
/ 14 февраля 2012

Вот мой первый удар. Могу поспорить, что мы можем сделать это проще, но это кажется нормальным.

 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 ]
0 голосов
/ 30 августа 2013
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  

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...