Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当数字是每个条目的第一部分时,如何在Javascript中对数组进行数字排序?_Javascript_Arrays - Fatal编程技术网

当数字是每个条目的第一部分时,如何在Javascript中对数组进行数字排序?

当数字是每个条目的第一部分时,如何在Javascript中对数组进行数字排序?,javascript,arrays,Javascript,Arrays,我正在从字符串创建一个单词列表。然后,我将该字符串拆分为单个单词,统计每个单词重复的次数,并显示它。那里的一切都很完美。但是,结果不按特定顺序显示单词和计数。我想先用最大的数字显示它们。我生成了以下代码: <!DOCTYPE html> <html> <body> <p>Click the button to display the array values after the split.</p> <button oncli

我正在从字符串创建一个单词列表。然后,我将该字符串拆分为单个单词,统计每个单词重复的次数,并显示它。那里的一切都很完美。但是,结果不按特定顺序显示单词和计数。我想先用最大的数字显示它们。我生成了以下代码:

<!DOCTYPE html>
<html>
<body>

<p>Click the button to display the array values after the split.</p>

<button onclick="analyze()">Analyze</button>

<p id="displayText"></p>

<script>
function analyze() {
    var str = "This this is is is is is is is is is is is is is is is just just a test test test";
    var res = str.split(" ");
    document.getElementById("displayText").innerHTML = res;
    document.getElementById("displayText").innerHTML += "<br/><br/>The amount of words is: " + res.length + "<br/><br/><br/>";

    document.getElementById("displayText").innerHTML += "The list of words:<br/><br/>";

    var words = [];

    var wordsWithCount = [];

    for (i = 0; i < res.length; i++) {
        words.push(res[i]);
        document.getElementById("displayText").innerHTML += words[i] + "<br/><br/>";
    }

    var current = null;
    var cnt = 0;
    for (var i = 0; i < words.length; i++) {
        if (words[i] != current) {
            if (cnt > 0) {
                document.getElementById("displayText").innerHTML += "<br/><br/>" + cnt + " - " + current + "<br/>";
                wordsWithCount.push(cnt + " - " + current);
            }
            current = words[i];
            cnt = 1;
        } else {
            cnt++;
        }
    }

    if (cnt > 0) {
        document.getElementById("displayText").innerHTML += "<br/><br/>" + cnt + " - " + current + "<br/>";
        wordsWithCount.push(cnt + " - " + current);
    }

    wordsWithCount.sort();

    document.getElementById("displayText").innerHTML += "<br/><br/><br/><br/><br/>The list of SORTED words:<br/><br/>";

    for (i = 0; i < wordsWithCount.length; i++) {
        document.getElementById("displayText").innerHTML += wordsWithCount[i] + "<br/><br/>";
    }
}
</script>

</body>
</html>

单击按钮以显示拆分后的数组值

分析

函数分析(){ var str=“这只是一个测试”; var res=str.split(“”); document.getElementById(“displayText”).innerHTML=res; document.getElementById(“displayText”).innerHTML+=“

字数为:“+res.length+”

”; document.getElementById(“displayText”).innerHTML+=“单词列表:

”; var-words=[]; var wordsWithCount=[]; 对于(i=0;i
”; } 无功电流=零; var-cnt=0; for(var i=0;i0){ document.getElementById(“displayText”).innerHTML+=“

”+cnt+“-“+current+”
”; 推送(cnt+“-”+电流); } 当前=字[i]; cnt=1; }否则{ cnt++; } } 如果(cnt>0){ document.getElementById(“displayText”).innerHTML+=“

”+cnt+“-“+current+”
”; 推送(cnt+“-”+电流); } wordsWithCount.sort(); document.getElementById(“displayText”).innerHTML+=“





排序词列表:

”; 对于(i=0;i
”; } }
这是输出的最后一位。正如你所看到的,它正在被排序,但只按第一位数字排序。因此,15显示在2之前。有什么想法吗

已排序单词的列表:

1-这个

1-a

1-这个

15-是

2-刚刚

3-测试


我很可能需要在某个时候将其分成两个数组,因为我希望用户能够复制和粘贴所有单词,而不需要数字。但是,我假设这将是最后一步,因为如果我将每个单词的频率分解为它自己的数字数组,并将单词保留在它们自己的数组中,那么排序函数将对一个数组进行排序,而另一个数组将不会跟随。

使用
Intl.Collator
进行排序。像这样:

var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
var test = ['1 - this', '3 - this', '14 - this'];
test.sort(collator.compare);
输出
[“1-此”、“3-此”、“14-此”]

var collator=new Intl.collator(未定义,{numeric:true,敏感度:'base'});
var测试=['1-这个','3-这个','14-这个'];

log(test.sort(collator.compare))使用
Intl.Collator
进行操作。像这样:

var collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});
var test = ['1 - this', '3 - this', '14 - this'];
test.sort(collator.compare);
输出
[“1-此”、“3-此”、“14-此”]

var collator=new Intl.collator(未定义,{numeric:true,敏感度:'base'});
var测试=['1-这个','3-这个','14-这个'];

log(test.sort(collator.compare))
您只需添加一个自定义比较函数,将其传递到
wordsWithCount.sort()调用中即可。这里我声明了一个名为
compareWordCount
的函数,并使用了@Pointy所建议的方法;使用parseInt忽略附加到数组值的所有非整数部分。请看以下工作片段:


单击按钮以显示拆分后的数组值

分析

函数compareWordCount(a、b){ if(parseInt(a)
字数为:“+res.length+”

”; document.getElementById(“displayText”).innerHTML+=“单词列表:

”; var-words=[]; var wordsWithCount=[]; 对于(i=0;i
”; } 无功电流=零; var-cnt=0; for(var i=0;i0){ document.getElementById(“displayText”).innerHTML+=“

”+cnt+“-“+current+”
”; 推送(cnt+“-”+电流); } 当前=字[i]; cnt=1; }否则{ cnt++; } } 如果(cnt>0){ document.getElementById(“displayText”).innerHTML+=“

”+cnt+“-“+current+”
”; 推送(cnt+“-”+电流); } 排序(compareWordCount); document.getElementById(“displayText”).innerHTML+=“





排序词列表:

”; 对于(i=0;i
”; } }
您只需添加一个自定义比较函数,将其传递到
wordsWithCount.sort()调用中即可。这里我声明了一个名为
compareWordCount
的函数,并使用了@Pointy所建议的方法;使用parseInt忽略附加到数组值的所有非整数部分。请看以下工作片段:


Clic