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

Javascript 如何从数组中随机化句子长度,javascript,arrays,Javascript,Arrays,对此可能有一个简单的解决方案,但出于某种原因,我似乎无法在网站或网络上的其他地方找到它。只是想从数组中产生一个随机长度的句子。以下是一个例子: var words = ["yes", "ok", "java", "pull my hair out", "sleep"]; 下面是我目前用来随机化数组内容的代码,但它总是生成一个句子,其中每个字符串使用一次。我想要不同的句子长度 function fisherYates(words) { var i = words.length, j, tempi

对此可能有一个简单的解决方案,但出于某种原因,我似乎无法在网站或网络上的其他地方找到它。只是想从数组中产生一个随机长度的句子。以下是一个例子:

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;
}

建议?

我建议您从
1
n
中选择一个随机数
m
(其中
n
是您想要的句子的最大长度)。然后从数组中随机选择
m
项,并将它们放入新数组中:

var words=[“是”、“好”、“java”、“拔我的头发”、“睡觉”];
警告(随机(单词,10)。加入(“”+);
函数随机化(数组,最大值){//数组,n
var length=Math.ceil(最大值*Math.random());//m
var结果=新数组(长度);
var count=array.length;
var指数=0;
while(索引<长度){
结果[index++]=数组[Math.floor(count*Math.random())];
}
返回结果;

}
如果不需要重复的字符串,请复制数组并从中拼接随机成员以形成新集合。只需从随机位置拼接出随机数目的字符串

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

Fisher-Yates是一种洗牌算法。它不会改变输入数组的长度。是的,我知道。这就是为什么我说我用它来随机化数组的内容。我在寻找一个代码块,它将生成一个随机长度的句子。他用I表示单词。length,所以,你将捕获所有内容。你需要将i设置为你想要的最小单词和最大单词之间的随机数。输出句子可以包含重复的单词吗?如果不包含重复的单词,我会更喜欢。重复单词的几率是多少?相当多,但结果很滑稽。这非常有效,谢谢。对于任何想知道如何实现这一点的人,我只是在函数之前声明了我的数组,然后在定义了变量之后将其应用于变量,就像这样:
var words\u random=randWords(arr)。简单有效。