2014-02-19 41 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