如何从数组中随机化句子长度

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 从 1n 的随机数 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(' ') );