当数字是每个条目的第一部分时,如何在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