从数组中随机选择一个值,但总是在javascript中将其拆分为50/50

时间:2013-03-08 11:10:25

标签: javascript jquery arrays

我有一系列硬编码名称不会改变。也只有2个值。

我需要遍历数组并随机选择一个值,但永远不会返回相同的值两次。

我目前的代码是:

var pick_url = new Array('url_1', 'url_2');
var picked_url_to_use = pick_url[Math.floor(Math.random() * pick_url.length)];
var base_url = picked_url_to_use;

console.log(base_url);

这样可以正常工作,但有时会多次返回相同的值。

有人可以帮忙解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

如果您想知道返回了哪些值,可以选择两种常规选项:

您可以从pick_url数组中删除返回的项目,因此无法再返回。 为此,请查看javascript的splice函数:http://www.w3schools.com/jsref/jsref_splice.asp

您还可以跟踪已在单独数组中返回的内容。然后,当你得到第二个网址时,检查它是否已经发送过。如果有,请选择一个新的随机项,然后重新检查。 从理论上讲,如果随机选择已经使用过的物品,这可能需要很长时间。

我会选择第一个选项,因为它更快,不需要重复。

答案 1 :(得分:1)

var pick_url = ['url_1', 'url_2'];
var base_url = picked_url = pick_url.splice(Math.floor(Math.random() * pick_url.length), 1).join();

编辑:我不确定您是否要始终返回url_1然后返回url_2,或随机网址然后返回其他网址?

以下内容应返回随机网址,然后是后续通话中的下一个网址:

function rurl() { var picked_url = pick_url.splice(Math.max(0, Math.floor(Math.random() * pick_url.length)), 1).join(); return picked_url; }

如果您希望它始终返回url_1然后返回url_2,请将Math.max更改为Math.min,或者更好的是,只需执行pick_url.splice(0,1).join();

答案 2 :(得分:0)

如果你在数组中确实总是有两个值:

var pick_url = new Array('url_1', 'url_2');
var random_index1 = Math.floor( Math.random() * 2 );
var random_index2 = Math.abs( random_index1 - 1 );

console.log( pick_url[ random_index1 ] );  // either url_1 or url_2
console.log( pick_url[ random_index2 ] );  // always the other url

演示:http://jsfiddle.net/jGurr/