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