我有一个数组数组。
var ArrOfarr = { A1: ["choice", "choice2", "choice3"], A2: ["choice1", "choice2"], A3: ["choice1", "choice2"], A4: [], A5: [], A6: [], A7: [] }
每次单击按钮时,我想从'ArrOfarr'中选择随机数组。我试过下面的内容,但是看到'undefined':
function A()
{
var item = ArrOfarr[Math.floor(Math.random()*ArrOfarr.length)];
alert(item);
}
如何从上面的数组中获取随机数组(不重复直到达到它的长度)。 我怎样才能得到随机挑选的数组的名称?
答案 0 :(得分:5)
您没有数组,但是包含数组的对象。要选择随机条目,您可以使用以下代码:
function A(){
var keys = Object.keys( ArrOfarr );
var name = keys[ Math.floor(Math.random()*keys.length) ];
var item = ArrOfarr[ name ];
alert( name );
alert( item );
}
另一种方法是首先更改数据结构:您可以使用包含data
以及name
的包装器对象而不是数组作为内部对象。
var ArrOfarr = [ {name: 'A1', data: ["choice", "choice2", "choice3"] }, /* ... */ ];
function A() {
var item = ArrOfarr[Math.floor(Math.random()*ArrOfarr.length)];
alert(item.data);
}
答案 1 :(得分:1)
var ArrOfarr = { A1: ["choice", "choice2", "choice3"], A2: ["choice1", "choice2"], A3: ["choice1", "choice2"], A4: [], A5: [], A6: [], A7: [] }
是一个对象文字
var ArrOfarr = [["choice", "choice2", "choice3"], ["choice1", "choice2"], ["choice1", "choice2"], [], [], [], []]
数组数组;
使用数组定义更改代码,或使用Sirko代码。
答案 2 :(得分:1)
您只需要将'A'
加到您随机选择的索引前面:
function A(){
var item = ArrOfarr['A'+(Math.floor(Math.random() * ArrOfarr.keys().length)+1)];
alert(item);
}
另外,请注意+1
:这是因为您的对象从A1
开始计数,而您的random
函数返回从0
开始的值。
最后一项更改是在.keys()
功能中添加了random
。由于ArrOfarr
是一个对象,因此它没有length
属性。但是,.keys()
会返回其键的数组,其中包含length
属性。
答案 3 :(得分:0)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
计算对象中的键数,运行具有该计数上限的随机操作。
使用for..in循环获取该随机数,每个属性+1。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in