我有四个变量列表。我想随机选择一个使用。我的变量看起来像......
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)]
但很快就明白了,因为我只是在使用一个字符串而没有指向上面的实际变量,所以它永远不会有效。
无论如何,我可以随机选择我在上面定义的四个变量中的一个吗?
答案 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);
}