// JavaScript Document
var person = prompt("GIVE INPUT", "");
var count = 0;
var array = person.split(",");
var freq = [];
var words = [];
//freq.fill(0);
//words.fill("");
//window.alert(freq[0]);
var i = 0, j = 0;
while (array.length > 0) {
var temp = array[0];
while (j < array.length) {
if (temp == array[j]) {
count = count + 1;
array.splice(j, 1);
//console.log(array);
j = 0;
}
else {
j = j + 1;
}
}
freq[freq.length] = count;
count = 0;
words[words.length] = temp;
}
window.alert(freq + "n" + words);
问题是每当我运行它时都会发生无限循环并且没有显示输出,我找不到错误,如果可能的话,请帮助。此代码用于查找输入字符串中单词的频率,其中单词以逗号分隔。谢谢。
你只需要把var i=0,j=0;
放在while
里!
while(array.length>0)
{var i=0,j=0;
工作小提琴
您在每次迭代时将循环变量 j 重置为 0。此条件if(temp==array[j])
永远不会失败,因此 j 始终重置为 0,因此 while(j<array.length)
始终为真。
从内部 While 循环出来后,您需要将j
重置为零。由于j
的增量值不允许它再次进入内部循环,因此array.length
不会减少 我们得到了一个无限循环。
// JavaScript Document
var person = prompt("GIVE INPUT", "");
var count=0;
var array = person.split(",");
var freq = new Array();
var words = new Array();
//freq.fill(0);
//words.fill("");
//window.alert(freq[0]);
var i=0,j=0;
while(array.length>0)
{
var temp=array[0];
while(j<array.length)
{
if(temp==array[j])
{
count=count+1;
array.splice(j,1);
//console.log(array);
j=0;
}
else
{
j=j+1;
}
}
freq[freq.length]=count;
count=j=0;
words[words.length]=temp;
}
window.alert(freq+"n"+words);
这是 for 对一致性更有用的地方。你可以用这个 for 循环替换内部 while 循环:
for(j=a.length-1; j>=0; j--)
if(temp==a[j]) {
count=count+1;
a.splice(j,1);
}
尽管如此,计数方法的整体复杂性可以通过地图等数据结构来降低。
脚本的重要部分可以简化为:
var counter = new Map();
for (i in array)
counter.set(array[i], (counter.get(array[i])||0)+1);
var freq = Array.from(counter.values());
var words = Array.from(counter.keys());