【问题标题】:In Javascript, how do I generate a random element out of a list?在 Javascript 中,如何从列表中生成随机元素?
【发布时间】:2011-05-25 00:22:39
【问题描述】:

假设我有一个字符串列表。如何生成随机的?

【问题讨论】:

  • 如果您需要以非重复的方式获取随机字符串(上面未指定),请考虑使用“shuffle”,例如 Fisher-Yates。 (在洗牌之后,您可以从阵列的前面“移动”。)

标签: javascript jquery list


【解决方案1】:

你的意思是,获取一个随机数组成员?

var strings = ['a', 'b', 'c'];

var randomIndex = Math.floor(Math.random() * strings.length);

var randomString = strings[randomIndex];

See it on jsFiddle.

如果你的意思是一个随机字符串,那就有点不同了。

var randomStrLength = 16,
    pool = 'abcdefghijklmnopqrstuvwxyz0123456789',
    randomStr = '';


for (var i = 0; i < randomStrLength; i++) {
     var randomChar = pool.charAt(Math.floor(Math.random() * pool.length));
     randomStr += randomChar;   
}

See it on jsFiddle.

当然,您可以跳过 pool 变量并使用 97 ('a'.charCodeAt(0)) 和 122 ('z'.charCodeAt(0)) 之间的随机数(用于小写字母等)执行 String.fromCharCode()。但取决于您想要的范围(小写和大写,加上特殊字符),使用池不太复杂。

【讨论】:

  • 不会在那里使用 Math.ceil() 导致永远不会选择第一个元素 (0)?
  • @Andrew Barber:不是从来没有,而是极少。您将获得四个索引的分布,其中第一个仅在随机数恰好为零时出现。
  • @Guffa:极少——你的意思是平均 20% 的时间?
  • @Andrew Barber 不久前我意识到自己的错误时改变了它:)
  • @Mahesh Velaga:不,接近 0.00000000000001% 的时间。
【解决方案2】:

Alex 和 Mahesh 说得对,只是想展示如果我觉得生活很危险,我可以如何实施他们的解决方案。我就是这么做的。

Array.prototype.chooseRandom = function() {
  return this[Math.floor(Math.random() * this.length)];
};
var a = [1, 2, 3, 4, 5];
a.chooseRandom(); // => 2
a.chooseRandom(); // => 1
a.chooseRandom(); // => 5

【讨论】:

  • 名声该死,我喜欢改变原型!
  • 等等,你能保证样本输出吗? :P
【解决方案3】:
var randomString = myStrings[Math.floor(Math.random() * myStrings.length)]

【讨论】:

    【解决方案4】:
    var rand = 0; 
    var newPic = []; 
    var pic = [1,2,3] //length = 18 for ( var i=0; i<18; i++ ){ 
        rand = Math.floor(Math.random()*19); 
        newPic.push(pic[rand-1].slice()); 
    } alert(newPic); 
    

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 2012-09-14
      • 1970-01-01
      相关资源
      最近更新 更多