可能有一个简单的解决方案,但出于某些原因,我似乎无法在网站上或网上的其他地方找到它。只是试图从一个数组产生一个RANDOM LENGTH的句子。这是一个例子:
var words = ["yes", "ok", "java", "pull my hair out", "sleep"];
这是我目前用于随机化数组内容的代码,但它总是生成一个句子,其中每个字符串都使用一次。我想要不同的句子长度。
function fisherYates(words) {
var i = words.length, j, tempi, tempj;
if ( i == 0 ) return false;
while ( --i ) {
j = Math.floor( Math.random() * ( i + 1 ) );
tempi = words[i];
tempj = words[j];
words[i] = tempj;
words[j] = tempi;
}
return words;
}
建议?
答案 0 :(得分:2)
我建议您从m
到1
选择一个随机数n
(其中n
是您想要的句子的最大长度)。然后,您从数组中随机选择m
项并将它们放入一个新数组中:
var words = ["yes", "ok", "java", "pull my hair out", "sleep"];
alert(randomize(words, 10).join(" ") + ".");
function randomize(array, maximum) { // array, n
var length = Math.ceil(maximum * Math.random()); // m
var result = new Array(length);
var count = array.length;
var index = 0;
while (index < length) {
result[index++] = array[Math.floor(count * Math.random())];
}
return result;
}
&#13;
希望有所帮助。
也许不是。
答案 1 :(得分:1)
如果您不想重复字符串,请复制数组并从中拼接随机成员以形成新集合。只需从随机位置拼掉随机数量的字符串。
function randWords(arr) {
// Copy original array
arr = arr.slice();
// Random number of words to get
var len = (Math.random() * arr.length + 1)|0;
var result = [];
// Randomly fill result from arr, don't repeat members
while (len--) {
result.push(arr.splice(Math.random()*arr.length|0, 1));
}
return result;
}
console.log( randWords(["yes", "ok", "java", "pull my hair out", "sleep"]).join(' ') );