2015-09-09 1 views
0

У меня есть ответ JSON, который выглядит следующим образом:Выберите случайный предмет из JSON ответа

{ 
    "category1": [ 
    { 
     "Description": "Insert description here", 
     "Title": "Title #1" 
    } 
    ], 
    "category2": [ 
    { 
     "Description": "Insert description here", 
     "Title": "Title #2" 
    }, 
    { 
     "Description": "Insert description here", 
     "Title": "Title #3" 
    } 
    ] 
} 

Как я могу получить случайный предмет из этого ответа, прочитав обе категории?

Мои JSFiddle здесь работает Категория 2. Но я не знаю, как читать обе категории: http://jsfiddle.net/uzpfxdgp/

+1

Вы хотите случайную категорию или случайный предмет из всех категорий в сочетании, или случайный элемент для каждой категории? Что вы делали до сих пор? –

+0

Обновлено с помощью JSFiddle. – mapr

ответ

0
var mapped = Object.keys(json).map(function(key, index){ return json[key]; }) 
           .reduce(function(a, b) { return a.concat(b); }); 

var index = Math.floor(Math.random() * mapped.length); 
console.log(mapped[index]); 
+0

Это работает! Это то, что я искал. Спасибо. http://jsfiddle.net/uzpfxdgp/2/ – mapr

0

Я не проверял, но я думаю, что это может сделать трюк (где myObj является объектом вы включили выше).

var categoryArr = []; 

for (var category in myObj) { 
    categoryArr.push(myObj[category]) 
} 

var randomObj = categoryArr[Math.floor(Math.random() * categoryArr.length)]; 
+0

Последний 'catArr' должен быть' categoryArr'. – Gijs

0

Взгляните на эту jsFiddle, что я создал. Это то, что вы ищете? http://jsfiddle.net/Arllo/q66wkkmx/

var list = { 
 
    "category1": [ 
 
    { 
 
     "Description": "Insert description here", 
 
     "Title": "Title #1" 
 
    } 
 
    ], 
 
    "category2": [ 
 
    { 
 
     "Description": "Insert description here", 
 
     "Title": "Title #2" 
 
    }, 
 
    { 
 
     "Description": "Insert description here", 
 
     "Title": "Title #3" 
 
    } 
 
    ] 
 
}; 
 
var numberOfProperties = Object.keys(list).length; 
 
var randomProperty = Math.floor((Math.random() * numberOfProperties) + 1); 
 
var randomCategory = "category" + randomProperty; 
 
console.log(list[randomCategory]);

+0

Закрыть. Я ищу один объект из обеих категорий. Ваш код возвращает оба заголовка # 2 и Title # 3 из категории 2. – mapr

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