Javascript 排序数组中的重复项

Javascript 排序数组中的重复项,javascript,Javascript,我正在使用一个函数来计算数组中字符串的重复数,并显示每次重复出现的次数。问题是它会在任何旧函数中吐出它们。输出如下所示: a来-->22次堕胎来-->1次关于来-->3 确认次数-->1次实际次数-->2次 事情来了-->1次以前来了-->1次援助来了-->1次 全部来-->允许4次来-->1次盟友来-->1次 几乎来了-->1次单独来-->1次已经来-->1 时间也来-->2次总是来-->1次美国来 -->1次美国人来-->1次美国人来-->2次美国人来-->3次类比来-->1次美国人来-->

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

a来-->22次堕胎来-->1次关于来-->3 确认次数-->1次实际次数-->2次 事情来了-->1次以前来了-->1次援助来了-->1次 全部来-->允许4次来-->1次盟友来-->1次 几乎来了-->1次单独来-->1次已经来-->1 时间也来-->2次总是来-->1次美国来 -->1次美国人来-->1次美国人来-->2次美国人来-->3次类比来-->1次美国人来-->46次 另一个来-->4月来-->1次来-->16 时间区域来-->1次

我需要它做的是将这些输出放到另一个数组中,并对它们进行排序,这样我就可以遍历它,使输出看起来像:

“a”和“a”分别是997次和439次“hello”和398次“highboy” 147次“优秀”99次“大规模”44次“纵火犯”30次 “珍妮”来了19次“紫色”来了6次

。。。等等

这是我正在使用的函数:

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();
函数计数(){
var words=['hi','hi','hello','smack'];
words.sort();
无功电流=零;
var-cnt=0;
for(var i=0;i0){
document.write(当前+'来-->'+cnt+'次
'); } 当前=字[i]; cnt=1; }否则{ cnt++; } } 如果(cnt>0){ document.write(current+'comes-->'+cnt+'times'); } } 计数();
我不想通过调用count()和拥有一堆
document.write()
来使用它,我想把它全部打包到另一个数组中,这样我就可以按顺序得到所有这些值。我希望这是有道理的


我知道我必须创建另一个数组,比如说
var sorted_array
;但是我怎样才能从这个数组中获得这些信息呢

一种方法是这样的(以避免多个document.write)

函数计数(){
var words=['hi','hi','hello','smack'];
words.sort();
无功电流=零;
var-cnt=0;
var输出=[];
for(var i=0;i0){
push(电流+'来自-->'+cnt+'次
'); } 当前=字[i]; cnt=1; }否则{ cnt++; } } 如果(cnt>0){ push(电流+'来自-->'+cnt+'次
'); output.sort();//按单词排序,而不是按单词出现的次数排序 document.write(output.join()); /*警报(输出)*/ } } 计数();
将问题一分为二,首先创建一个包含重复项及其计数的数据结构,然后将此数据结构转换为按发生次数排序的数组。然后你可以根据结果做任何你需要的事情

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); });

我会创建一个对象,将单词作为键,将计数作为值,然后您可以以任何方式输出它:

function count(words) {
    var o = {}, a= [];

    for (var i=0; i<words.length; i++) 
        o[words[i]] = words[i] in o ? o[words[i]]+1 : 1;

    for (var key in o) 
        a.push(key + ' comes --> ' + o[key] + ' times<br>');

    return a.sort().join('');
}
函数计数(字){
变量o={},a=[];
对于(var i=0;i为您制作了一个示例,希望这对您有所帮助

var words = ['foo', 'bar', 'foo', 'baz'],
    word,
    key,
    wordCount = {},
    sortedWordCountKeys,
    pluralize,
    output;

for (word in words) {
    wordCount[words[word]] = wordCount[words[word]] ?
        wordCount[words[word]] + 1 :
        1;
}

sortedWordCountKeys = Object.keys(wordCount).sort(function(a, b) {
    return wordCount[b] - wordCount[a];
});

for (key in sortedWordCountKeys) {
    word = sortedWordCountKeys[key];
    pluralize = wordCount[word] > 1 ? 's' : '';
    output = wordCount[word] + ' occurence' + pluralize + ' of "' + word + '" found.';
    console.log(output);
}
或者你更喜欢这个

var words=['foo','bar','foo','baz'],
我
单词
字数={},
分类的数字键,
多元化,,
产出;
对于(i=0;i1?'s':'';
output=wordCount[word]+'occurrence'+pluralize+'of“'+word+'”found.';
控制台日志(输出);
}
或者甚至是这个

var text='Lorem ipsum door sit amet,concetetur adipiscing elit.Aenean vel lacus justo.Quisque eu Lorem at metus consummentum iaculis a risus.Proin vitae ligula iaculis,vehicleua ligula quis,luctus ipsum.nisi tempus中的unla concetetur eros,acculis accumsan.Duis vitagnessim ornare agna,vel element arcum ut在欧盟nisi的利古拉一个酒馆里,有一个酒馆馆长,一个临时酒馆,一个威尼斯人,一个拍卖人,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆,一个酒馆一种是临时性的,一种是临时性的,一种是临时性的,一种是临时性的,一种是临时性的,一种是临时性的,一种是临时性的,一种是临时性的,另一种是临时性的,一种是临时性的,一种是临时性的,一种是临时性的,一种是临时性的,另一种是临时性的,一种是临时性的,一种是温和的,另一种是辅助性的,一种是永久性的,
我
单词=文本。拆分(“”),
单词
字数={},
分类的数字键,
多元化,,
产出;
对于(i=0;i1?'s':'';
output=wordCount[word]+'occurrence'+pluralize+'of“'+word+'”found.';
控制台日志(输出);
}

您是如何处理订购问题的?我没有(问题中遗漏了这一部分),我解决了多个文档写入问题…我将更新我的回答我无法在我的机器上运行此问题。它仍然可以
var words = ['foo', 'bar', 'foo', 'baz'],
    word,
    key,
    wordCount = {},
    sortedWordCountKeys,
    pluralize,
    output;

for (word in words) {
    wordCount[words[word]] = wordCount[words[word]] ?
        wordCount[words[word]] + 1 :
        1;
}

sortedWordCountKeys = Object.keys(wordCount).sort(function(a, b) {
    return wordCount[b] - wordCount[a];
});

for (key in sortedWordCountKeys) {
    word = sortedWordCountKeys[key];
    pluralize = wordCount[word] > 1 ? 's' : '';
    output = wordCount[word] + ' occurence' + pluralize + ' of "' + word + '" found.';
    console.log(output);
}
var words = ['foo', 'bar', 'foo', 'baz'],
    i,
    word,
    wordCount = {},
    sortedWordCountKeys,
    pluralize,
    output;

for (i = 0; i < words.length; i++) {
    wordCount[words[i]] = wordCount[words[i]] ?
        wordCount[words[i]] + 1 :
        1;
}

sortedWordCountKeys = Object.keys(wordCount).sort(function(a, b) {
    return wordCount[b] - wordCount[a];
});

for (i = 0; i < sortedWordCountKeys.length; i++) {
    word = sortedWordCountKeys[i];
    pluralize = wordCount[word] > 1 ? 's' : '';
    output = wordCount[word] + ' occurence' + pluralize + ' of "' + word + '" found.';
    console.log(output);
}
var text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vel lacus justo. Quisque eu lorem at metus condimentum iaculis a a risus. Proin vitae ligula iaculis, vehicula ligula quis, luctus ipsum. Nulla consectetur eros in nisi tempus, sit amet mollis eros accumsan. Duis dignissim ornare magna, vel elementum arcu accumsan ut. Curabitur at ligula a dui pretium placerat at eu nisi. Donec a tellus tempor, venenatis tortor nec, auctor nisi. Sed congue arcu sit amet tortor vulputate vulputate. Etiam sed odio eleifend, rhoncus risus nec, porttitor libero. Etiam placerat mauris vitae felis egestas, in tristique velit condimentum. Nam odio elit, congue eget semper vel, lacinia vel dolor. Duis tempor enim diam, vel auctor tortor tincidunt eget. Praesent congue quam mi, et lobortis ipsum tempus nec. Duis blandit mi et facilisis adipiscing. Etiam ut tellus ut dolor convallis consectetur a id nulla.',
    i,
    words = text.split(' '),
    word,
    wordCount = {},
    sortedWordCountKeys,
    pluralize,
    output;

for (i = 0; i < words.length; i++) {
    words[i] = words[i]
       .replace(/\./g, '')
       .replace(/\,/g, '');

    wordCount[words[i]] = wordCount[words[i]] ?
        wordCount[words[i]] + 1 :
        1;
}

sortedWordCountKeys = Object.keys(wordCount).sort(function(a, b) {
    return wordCount[b] - wordCount[a];
});

for (i = 0; i < sortedWordCountKeys.length; i++) {
    word = sortedWordCountKeys[i];
    pluralize = wordCount[word] > 1 ? 's' : '';
    output = wordCount[word] + ' occurence' + pluralize + ' of "' + word + '" found.';
    console.log(output);
}