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

我现在有这个代码

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


提前致谢

最佳答案

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

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


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

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

10-06 02:14