2014-02-19 2 views
0

У меня есть this code, который поднимает случайную текстовую ссылку с помощью getJSON. Он выбирает один случайный предмет за раз. Я хотел бы знать, как подобрать несколько разных предметов и показать их в #randomkeyword. Все, что я могу придумать, это настроить сценарий два раза, но я думаю, что у него может быть шанс собрать один и тот же элемент. Есть ли способ сделать это?Как получить более одного случайного другого элемента в этом javascript

jQuery.getJSON('random.json', function(data) { //Ajax call 

var item = data.link[Math.floor(Math.random()*data.link.length)]; 

jQuery('<a title="' + item.des + '" href="http://' + item.url + '">'+ item.title +'</a>').appendTo 

('#randomkeyword'); 

}); 

JSON файла:

{"link":[{"title":"XXXX","url":"google.com","des":"light"},{"title":"CCCCCCC","url":"yahoo.com","des":"dark"},{"title":"DDDDDDDD","url":"song.com","des":"light"},{"title":"CCCCCCCCCCCCCCC","url":"googlemap.com","des":"normal"},{"title":"RRRRRRRRRRRRRRR","url":"fun.com","des":"halo"}]} 

ответ

1

Чтобы избежать дубликатов, вы можете "перетасовать" список, то просто цикл через него с самого начала.

+0

http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript –

0

Вы можете проверить, совпадает ли второй элемент с первым элементом. Если это так, вы можете выбрать другой случайный элемент.

jQuery.getJSON('random.json', function(data) { //Ajax call 

var item = data.link[Math.floor(Math.random()*data.link.length)]; 
var item2=item;//set second item same as first item to access the while loop 

while(item==item2){ 
    item2 = data.link[Math.floor(Math.random()*data.link.length)]; 
} 

jQuery('<a title="' + item.des + '" href="http://' + item.url + '">'+ item.title +'</a>').appendTo 

('#randomkeyword'); 

}); 
//do the same for item2 
+0

Я попробовал ваш сценарий, но это не делает похоже, работают. Выбирается только один элемент. – RedGiant

+0

Вы делали 'jQuery (''+ item2.title +'') .appendTo ('# randomkeyword');' бит? – tredontho

+0

да, вы это сделали? Это то, что я имел в виду под «// делаю то же самое для item2» –

0

Так что, я думаю, вы можете сохранить список, а затем просто перебрать ее, однако, много раз вы хотите, splice из выбранных из них, как вы идете (чтобы избежать дубликатов), а затем запустить JQuery на каждом элементе в массиве результатов. Обратите внимание, что этот делает модифицированным возвращенным массивом, поэтому сначала сделайте его копию, если вам это нужно.

Например:

var data = ['one', 'two', 'three']; 
var numOfLinks = 2; 
var result = []; 
for(i = 0; i < numOfLinks; i++) { 
    var index = Math.floor(Math.random()*data.length); 
    var link = data[index]; 
    data.splice(index,1); 
    result.push(link); 
} 
// iterate over result, doing your jQuery function over each element 

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

  • Нет связанных вопросов^_^