从变量列表中随机选择变量JavaScript

时间:2017-03-27 10:19:29

标签: javascript

我有四个变量列表。我想随机选择一个使用。我的变量看起来像......

laneRect_one = new Phaser.Rectangle(0, 0, game.width,  game.height / 4 - 50);
laneRect_two = new Phaser.Rectangle(0, game.height / 4 - 50, game.width,  game.height / 4 - 50);
laneRect_three = new Phaser.Rectangle(0, game.height / 4 * 2 - 100, game.width,  game.height / 4 - 50);
laneRect_four = new Phaser.Rectangle(0, game.height / 4 * 3 - 150, game.width,  game.height / 4 - 50);

所以我第一次尝试将变量名称放在像

这样的数组中
var laneArr = ["laneRect_one", "laneRect_two", "laneRect_three", "laneRect_four"];

然后做laneArr[Math.floor(Math.random() * laneArr.length)]但很快就明白了,因为我只是在使用一个字符串而没有指向上面的实际变量,所以它永远不会有效。

无论如何,我可以随机选择我在上面定义的四个变量中的一个吗?

3 个答案:

答案 0 :(得分:4)

您的问题是因为您在数组中放置字符串,而不是变量的值。要完成这项工作,只需删除引号:

var laneRect_one = 'one';
var laneRect_two = 'two';
var laneRect_three = 'three';
var laneRect_four = 'four';

var laneArr = [laneRect_one, laneRect_two, laneRect_three, laneRect_four];
var random = laneArr[Math.floor(Math.random() * laneArr.length)]

console.log(random);

答案 1 :(得分:0)

要完成Rory McCrossan的回答,您只需使用句柄而不是变量名称填充数组,这样,您的数组将包含您的对象而不仅仅是其名称。

请注意,您的代码可能适用于所有对象的包装对象。

这意味着:

let myObject = {

    laneRect_one: new Phaser.Rectangle(0, 0, game.width,  game.height / 4 - 50),
    laneRect_two: new Phaser.Rectangle(0, game.height / 4 - 50, game.width,  game.height / 4 - 50),
    laneRect_three: new Phaser.Rectangle(0, game.height / 4 * 2 - 100, game.width,  game.height / 4 - 50),
    laneRect_four: new Phaser.Rectangle(0, game.height / 4 * 3 - 150, game.width,  game.height / 4 - 50)

}

// and then

let laneArr = ["laneRect_one", "laneRect_two", "laneRect_three", "laneRect_four"];

myObject[laneArr[Math.floor(Math.random() * laneArr.length)]]; 

但对于像你想要的那样简单的事情,这将是太多的代码。

答案 2 :(得分:0)

这对我有用

  function test() {
        var laneArr = ["laneRect_one", "laneRect_two", "laneRect_three", "laneRect_four"],
            valueToUse = laneArr[Math.floor(Math.random() * laneArr.length)];
        // do something with the selected value
        alert(valueToUse);
    }

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