Как получить более одного случайного другого элемента в этом JavaScript

0

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

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"}]}
Теги:
random
floor
getjson

3 ответа

1

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

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
    Я попробовал ваш сценарий, но он не работает. Только один элемент выбран.
  • 0
    Вы делали jQuery('<a title="' + item2.des + '" href="http://' + item2.url + '">'+ item2.title +'</a>').appendTo('#randomkeyword'); немного?
Показать ещё 1 комментарий
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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню