如何定位一个名称等于变量值的数组?

时间:2016-10-02 07:20:47

标签: javascript arrays



// here goes random number generator

// arrays with info

foo1 = ["This is true!", true, false];
foo2 = ["This is false!", false, false];
foo3 = ["This is probably false!", false, false];
foo4 = ["This is probably true!", true, false];
foo5 = ["This might be true!", true, false];

// choosing a random array name

fooID = "foo" + randomNumber(1, 5);

/* How would I make this work? -

alert(<value of fooID>[0]);
<value of fooID>[2] = true;

*/
&#13;
&#13;
&#13;

我尝试做的是选择一个随机数组(所有都被命名为foo__),然后用它做点什么。

也许我甚至可以以完全不同的方式定位数组,甚至不需要fooID变量?我在StackOverflow中looked around发现我应该使用字典,但我真的不知道如何。

4 个答案:

答案 0 :(得分:4)

您可以只使用Array,因为您的数据是可迭代的,您需要一个随机数来获取结果。

&#13;
&#13;
super()
&#13;
function getRandomElement(array) {
    return array[Math.floor(Math.random() * array.length)]
}

var foos = [
        ["This is true!", true, false],
        ["This is false!", false, false],
        ["This is probably false!", false, false],
        ["This is probably true!", true, false],
        ["This might be true!", true, false]
    ],
    i;

for (i = 0; i < 10; i++) {
    console.log(getRandomElement(foos)[0]);
}
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您可以使用bracket notation,因为变量是全局定义的,window[/* array variable identifier */]

// here goes random number generator

// arrays with info

foo1 = ["This is true!", true, false];
foo2 = ["This is false!", false, false];
foo3 = ["This is probably false!", false, false];
foo4 = ["This is probably true!", true, false];
foo5 = ["This might be true!", true, false];

// choosing a random array name

fooID = window["foo" + 1  /* randomNumber(1, 5) */ ];

console.log(fooID);

答案 2 :(得分:2)

  
    

也许我甚至可以以完全不同的方式定位数组,

  

var foo = [
  ["This is true!", true, false],
  ["This is false!", false, false],
  ["This is probably false!", false, false],
  ["This is probably true!", true, false],
  ["This might be true!", true, false]
];

var fooItem = foo[Math.trunc(Math.random()*5)];
console.log(fooItem);

确实,只需在数组中创建一个数组。

答案 3 :(得分:1)

基本上您可以使用brackets property notation来实现所需,因为您可以在属性名称中使用变量或任何其他有效的JS表达式元素。

在您的示例中,foo1到foo6作为全局命名空间中的变量存在,这意味着它们全部附加到浏览器中的b对象。

因此,您要在变量中存储要访问的变量的名称,例如名称window,然后像这样访问相应的变量:

accessor
window[accessor]