2014-02-11 2 views
6

У меня есть массив массивов.Выберите случайный массив из массива массивов в javascript

var ArrOfarr = { A1: ["choice", "choice2", "choice3"], A2: ["choice1", "choice2"], A3: ["choice1", "choice2"], A4: [], A5: [], A6: [], A7: [] } 

Я хочу выбрать случайный массив из «ArrOfarr» каждый раз, когда я нажимаю кнопку. Я пробовал ниже, но видя «неопределенными»:

function A() 
{ 
var item = ArrOfarr[Math.floor(Math.random()*ArrOfarr.length)]; 
alert(item); 
} 

как я могу подобрать массив случайных образуют над Array (Без повтора, пока не достигнет его длины). И как я могу получить имя случайно выбранного массива?

+1

Это не массив массивов, это объект массивов. Посмотрите здесь - http: // stackoverflow.com/questions/2532218/pick-random-property-from-a-javascript-object –

ответ

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); 
} 

Альтернативой было бы изменить вам структуру данных в Первое место: вместо массивов в качестве внутреннего объекта вы можете использовать оболочку objec t, который содержит data, а также name.

var ArrOfarr = [ {name: 'A1', data: ["choice", "choice2", "choice3"] }, /* ... */ ]; 

function A() { 
    var item = ArrOfarr[Math.floor(Math.random()*ArrOfarr.length)]; 
    alert(item.data); 
} 
+0

Вы имеете в виду var ArrOfarr = [{name: A1, data: ["choice", "choice2", "choice3"]},/* ... * /}]; –

+0

@ M.K Что вы имеете в виду? – Sirko

+0

Любое из вышеперечисленных решений работает для вас? Я попробовал оба, но не видел предупреждения. –

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"], [], [], [], []] 

массива массивов;

Либо измените свой код с определением массива, либо используйте вместо него код Сирко.

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.

+0

'ArrOfarr.length' будет ошибкой' undefined' =>. – dfsq

+0

@dfsq: Вы правы. Исправлена. – Cerbrus

+0

Этот код ничего не вытащил –

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

Смежные вопросы