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

时间:2015-01-07 02:57:39

标签: javascript arrays

可能有一个简单的解决方案,但出于某些原因,我似乎无法在网站上或网上的其他地方找到它。只是试图从一个数组产生一个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;
}

建议?

2 个答案:

答案 0 :(得分:2)

我建议您从m1选择一个随机数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;
&#13;
&#13;

希望有所帮助。

Java Sex

也许不是。

答案 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(' ') );