[英]Pick random Array from array of arrays in javascript
我有一个数组数组。
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);
}
如何从上面的数组中获取随机数组(不重复直到达到它的长度)。 我怎样才能得到随机挑选的数组的名称?
你没有数组,但是包含数组的对象。 要选择随机条目,您可以使用以下代码:
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);
}
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代码。
您只需要在您随机选择的索引前加上'A'
:
function A(){
var item = ArrOfarr['A'+(Math.floor(Math.random() * ArrOfarr.keys().length)+1)];
alert(item);
}
另外,注意+1
:那是因为你的对象从A1
开始计数,而你的random
函数返回从0
开始的0
。
最后一个更改是在random
函数中添加.keys()
。 因为ArrOfarr
是一个对象,所以它没有length
属性。 但是, .keys()
返回其键的数组,该数组具有length
属性。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.