javascript - 对数组中的重复项进行排序

标签 javascript

我正在使用一个函数来计算数组中字符串的重复次数并显示每个字符串出现的次数。问题是它会在任何旧函数中将它们吐出。输出如下所示:

a comes --> 22 times abortions comes --> 1 times about comes --> 3 times acknowledgment comes --> 1 times actually comes --> 2 times affairs comes --> 1 times ago comes --> 1 times aid comes --> 1 times all comes --> 4 times allowed comes --> 1 times ally comes --> 1 times almost comes --> 1 times alone comes --> 1 times already comes --> 1 times also comes --> 2 times always comes --> 1 times america comes --> 1 times american comes --> 1 times americans comes --> 2 times an comes --> 3 times analogies comes --> 1 times and comes --> 46 times another comes --> 1 times april comes --> 1 times are comes --> 16 times area comes --> 1 time

我需要它做的是将这些输出放入另一个数组中,并对它们进行排序,以便我可以迭代它并使输出看起来像:

'a' comes 997 times 'and' comes 439 times 'hello' comes 398 times 'highboy' comes 147 times 'excellent' 99 times 'massive' 44 times 'arsonist' 30 times 'Jenny' comes 19 times 'purple' comes 6 times

...等等。

这是我正在使用的功能:

function count() {

    var words = ['hi', 'hi', 'hello', 'smack']; 

    words.sort();

    var current = null;
    var cnt = 0;
    for (var i = 0; i < words.length; i++) {
        if (words[i] != current) {
            if (cnt > 0) {
                document.write(current + ' comes --> ' + cnt + ' times<br>');
            }
            current = words[i];
            cnt = 1;
        } else {
            cnt++;
        }
    }
    if (cnt > 0) {
        document.write(current + ' comes --> ' + cnt + ' times');
    }

}

count();

我不想通过调用 count() 和一堆 document.write() 来使用它,我想将其全部打包到另一个我可以获取所有内容的数组中这些值按顺序排列。我希望这是有道理的。

我知道我必须创建另一个数组,例如varsorted_array;但是我怎样才能得到这个数组的信息呢?

最佳答案

将问题一分为二,首先创建一个保存重复项及其计数的数据结构,然后将该数据结构转换为按出现次数排序的数组。然后您可以对结果执行任何您需要的操作。

var occurences = ['hi', 'hi', 'hello', 'smack', 'smack', 'smack'].reduce(function (res, word) {
    res[word] = (res[word] || 0) + 1
    return res;
}, {});

var duplicates = Object.keys(occurences).map(function (k) {
    return {word: k, count: occurences[k]};
})
//make sure that we only keep duplicates
.filter(function(item) { return item.count > 1; })

//sort them by count descendent
.sort(function (a, b) { return b.count - a.count; })

//display the words and their count in the console
.forEach(function (dup) { console.log(dup.word, dup.count); });

关于javascript - 对数组中的重复项进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22111033/

相关文章:

javascript - Chrome 扩展内容脚本不起作用

javascript - 使用 C3 在 x 轴上使用单独的列制作简单的条形图

javascript - 我们可以用 cypress 测试元素文本是否包含 text_A 或 text_B 吗?

javascript - Flowplayer 实例的 $f 未定义

javascript - 自定义默认代码后不显示 Facebook 注销按钮

javascript - 谷歌脚本 : How to highlight a group of words?

javascript - 使用 Javascript Nodejs 进行密码哈希处理

javascript - Jquery/Javascript 在滚动后找到第一个可见元素

javascript - 在 Javascript 中按大写字母拆分

javascript - Nette PHP 框架和带有 token 认证的 RESTful API