如何在这个javascript中获得多个随机不同的项目

时间:2014-02-19 16:40:27

标签: javascript jquery random getjson floor

我有 this code ,它使用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"}]}

3 个答案:

答案 0 :(得分:1)

为了避免重复,你可以“洗牌”列表,然后从头开始循环。

答案 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

答案 2 :(得分: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