【发布时间】:2017-05-20 14:11:04
【问题描述】:
我正在尝试随机重建一段单词而不在 JavaScript 中重复相同的单词:
var para = 'dashing through the snow' +
' in a one horse open sleigh' +
' over the fields we go' +
' laughing all the way';
console.log(para);
function getRandomNumber(min, max)
{
return Math.floor(Math.random() * (max - min)) + min;
}
var words = para.split(' ');
var newPara = '';
for(var i = 0; i < words.length - 1; i++)
{
var curWord = words[getRandomNumber(0,words.length - 1)];
if(newPara.indexOf(curWord) == -1)
{
newPara += curWord + ' ';
console.log(newPara);
} else
{
i--;
}
}
代码将一个段落拆分为一个单词数组(总共 19 个)。然后我使用循环遍历这个数组并随机选择一个单词,检查该单词是否已添加到 newPara 字符串中。如果没有,我添加它。如果有,我从循环运行中减去 1。问题是当我使用 else 语句从循环中减去一个时,脚本会导致浏览器冻结。感谢您对此问题的任何帮助。
基于 cmets 我做了这个编辑:
if(newPara.length <= words.length)
{
if(newPara.indexOf(curWord) == -1)
{
newPara += curWord + ' ';
console.log(newPara);
} else
{
i--;
}
}
但是,我仍然遇到同样的错误。
【问题讨论】:
-
您从数组的长度中减去 1,但从不减小数组本身的大小 - 它是无限的。
-
else { i--; }的目的是什么? -
else { i-- }如果单词已经存在于新段落中,将从循环运行中减一。 @Press 我明白你在说什么。您的意思是:words[getRandomNumber(0,words.length - 1)];还是您的意思是i--;
标签: javascript loops for-loop random