【问题标题】:Sort array by frequency按频率排序数组
【发布时间】:2016-06-30 17:40:57
【问题描述】:

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

我现在有这个代码

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

提前致谢

【问题讨论】:

  • 数据会很好。

标签: javascript arrays sorting count


【解决方案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];
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 2021-07-28
    • 2020-10-19
    • 1970-01-01
    • 2019-01-15
    • 2021-12-03
    • 2014-11-07
    相关资源
    最近更新 更多