按频率排序数组

时间:2016-03-15 10:29:30

标签: javascript arrays sorting count

我想计算数组中每个字符串的次数,并按照数组中存在的次数对它们进行排序

我现在有了这个代码

hlasy.sort();

var zaciatok = null;
var pocet = 0;
for (var i = 0; i < hlasy.length; i++) {
    if (hlasy[i] != zaciatok) {
        if (pocet > 0) {
            console.log(zaciatok + ' má ' + pocet + ' hlasov');
        }
        zaciatok = hlasy[i];
        pocet = 1;
    } else {
        pocet++;
    }
}
if (pocet > 0) {
    console.log(zaciatok + ' má ' + pocet + ' Hlasov');
}

它可以工作,但它输出的数组中的字符串按字母顺序排序,而不是它们在数组中的次数。

例如,

输出

apple - 1
banana - 5
cherry - 4

但我需要这个

banana - 5
cherry - 4
apple - 1

提前致谢

1 个答案:

答案 0 :(得分:3)

两次通过。首先,计算每个单词的出现次数:

counter = {}
words.forEach(function(word) {
   counter[word] = (counter[word] || 0) + 1;
});

然后,通过比较两个单词的计数来对数组进行排序:

words.sort(function(x, y) {
   return counter[y] - counter[x];
});