我在寻找一个简洁的JavaScript函数,它接收一些值并返回按出现次数排序的唯一值,最常出现的次数是第一次。返回按计数排序的唯一值的JavaScript函数
例如,如果输入是数组[3,2,2,2,2,1,2,1]
那么输出应该是[2,1,3]
。
我在寻找一个简洁的JavaScript函数,它接收一些值并返回按出现次数排序的唯一值,最常出现的次数是第一次。返回按计数排序的唯一值的JavaScript函数
例如,如果输入是数组[3,2,2,2,2,1,2,1]
那么输出应该是[2,1,3]
。
这是我的第一次刺伤。我敢打赌,我们可以简化它,但这似乎没问题。
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 ]
我喜欢它。我看不出有什么办法来改善它。你是从头开始编写还是从你的lib中读取? :) – user1069609 2012-02-14 16:52:04
这是一个有点神秘,例如'count = uniques [arr [i]] ||会发生什么? 0;'行,请加几个注释请 – user1069609 2012-02-14 16:59:41
我会加评论。它只是说基本上如果没有一个具体的数值计数,然后初始化为0. – 2012-02-14 18:13:53
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;
}
输出= “对象{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
}
完成大功告成看后,开始实施:) – 2012-02-14 16:21:35
你是什么意思其他收藏品?只有对象('{}')和数组('[]'),我不知道如何将它应用于对象。 – 2012-02-14 16:23:54
你可能是对的,我对此并没有太多想法,我从原始问题中删除了这些东西。 – user1069609 2012-02-14 16:29:46