如何从数组中随机化句子长度
How To Randomize Sentence Length From Array
可能有一个简单的解决方案,但出于某种原因,我似乎无法在网站或网络上的其他地方找到它。只是试图从一个数组中生成一个随机长度的句子。这是一个例子:
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;
}
建议?
我建议你 select 从 1
到 n
的随机数 m
(其中 n
是句子的最大长度想)。然后你从数组中随机 select 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;
}
希望对您有所帮助。
也许不是。
如果不想要重复的字符串,复制数组,拼接个随机成员组成新的集合。只需从随机位置拼接出随机数量的字符串即可。
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(' ') );
可能有一个简单的解决方案,但出于某种原因,我似乎无法在网站或网络上的其他地方找到它。只是试图从一个数组中生成一个随机长度的句子。这是一个例子:
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;
}
建议?
我建议你 select 从 1
到 n
的随机数 m
(其中 n
是句子的最大长度想)。然后你从数组中随机 select 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;
}
希望对您有所帮助。
也许不是。
如果不想要重复的字符串,复制数组,拼接个随机成员组成新的集合。只需从随机位置拼接出随机数量的字符串即可。
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(' ') );