如何使用JavaScript从数组中随机选择一个值?

13

可能是重复问题:
JavaScript:从数组中获取随机值

我有一个包含以下行的外部js:

var postmessage = "hi my favorite site is http://google.com";

但是有没有一种方法可以从数组中随机选择一个站点,就像这样

var postmessage = "hi my favorite site is +'random'";

random= http://google.com, http://yahoo.com, http://msn.com, http://apple.com

我该如何让它工作?


2
将标题中的语言使用正确是一个好的开始。 - Richard H
你的帖子标题应该是“JavaScript”……不是吗?你可以通过以下方式初始化一个数组:var random = array(....);,然后使用“Math.random()”获取索引。 - Erhard Dinhobl
https://stackoverflow.com/a/45606635/8202629 - user8202629
3个回答

29
var favorites = ["http://google.com", "http://yahoo.com", "http://msn.com", "http://apple.com"];
var favorite = favorites[Math.floor(Math.random() * favorites.length)];
var postmessage = "hi my favorite site is " + favorite;

创建一个包含你的网站的数组,然后从数组中选择一个元素。你可以通过使用Math.random()来选择一个随机数来实现这一点,它会给你一个大于等于0且小于1的结果。将其乘以数组的长度,并取floor(即只取整数部分,舍去任何小数点),这样你就会得到一个从0到数组长度减1的数字(因此将是一个有效的索引到你的数组)。使用该结果从数组中选择一个元素。

有一个错误 - 需要在 favorites.length 后面加上括号。 - Wingman4l7
Math.round(7.919417901018048);// 8 & Math.floor(7.919417901018048); // 7 - user8202629

4

var sites = new Array('http://www.google.com', "http://www.stackoverflow.com")
var postmessage = "嗨,我最喜欢的网站是" + sites[Math.round(Math.random()*(sites.length-1))];

首先将所有网站放入一个数组中。然后从数组长度中获取一个随机数(-1是因为数组是从零开始索引的,而返回的长度从1开始)


1

像这样做:

function getRandomSite(){
   var sites = ["google.com","bing.com","xyz.com","abc.com","example.com"];
    var i = parseInt(Math.random()*(sites.length-1));
    return sites[i];
};

1
由于您正在乘以10,然后测试它是否大于长度,因此您为列表中的最后一个站点引入了偏差:它将更经常地被选中(在您的示例中几乎50%的时间)。相反,请使用数组的长度进行乘法运算。 - PeanutButterJelly
嗨,我在回答问题后就想到了这个。你说得完全正确。 - Naveed Ahmad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接