首先计算每个项目的频率。
{
apples: 1,
oranges: 4,
bananas: 2
}
然后从此频率对象创建一个数组,该数组也将删除重复项。
["apples", "oranges", "bananas"]
现在使用我们之前创建的频率图按降序排列该数组。
function compareFrequency(a, b) {
return frequency[b] - frequency[a];
}
array.sort(compareFrequency);
这是完整的源代码(使用新引入的数组函数 https://developer.mozilla.org/en/new_in_javascript_1.6#Array_extras在 ECMA 5 中)并结合重复数据删除和频率图生成步骤,
function sortByFrequency(array) {
var frequency = {};
array.forEach(function(value) { frequency[value] = 0; });
var uniques = array.filter(function(value) {
return ++frequency[value] == 1;
});
return uniques.sort(function(a, b) {
return frequency[b] - frequency[a];
});
}
与上面使用常规数组迭代相同。
function sortByFrequencyAndRemoveDuplicates(array) {
var frequency = {}, value;
// compute frequencies of each value
for(var i = 0; i < array.length; i++) {
value = array[i];
if(value in frequency) {
frequency[value]++;
}
else {
frequency[value] = 1;
}
}
// make array from the frequency object to de-duplicate
var uniques = [];
for(value in frequency) {
uniques.push(value);
}
// sort the uniques array in descending order by frequency
function compareFrequency(a, b) {
return frequency[b] - frequency[a];
}
return uniques.sort(compareFrequency);
}