2010-12-13 88 views
1

我有以下代碼;如何隨機選擇一個對象鍵?

namedarray['India']='New Delhi'; 
namedarray['Australia']='Canberra'; 
namedarray['Indonasia']='Jakarta'; 
namedarray['Iran']='Tehrani'; 
namedarray['Iraq']='Bhagdad'; 
namedarray['Nijeria']='Abuja'; 

document.getElementById('question').innerHTML="Q." +namedarray['Nepal']+" is capital for which country"; 

在尼泊爾的地方,我想隨機選擇一個鑰匙。我怎樣才能做到這一點?

+6

**對象**它們被稱爲**對象**關聯數組** **被命令** JavaScript對象** **無序**,這是一個重要的區別...我的藥片在哪裏.. – 2010-12-13 10:56:19

+2

@Ivo我有雜草,如果你喜歡...... :) – 2010-12-13 11:14:25

回答

3

試試這個:

function fetch_random(obj) { 
    var temp_key, keys = []; 
    for(temp_key in obj) { 
     if(obj.hasOwnProperty(temp_key)) { 
      keys.push(temp_key); 
     } 
    } 
    return obj[keys[Math.floor(Math.random() * keys.length)]]; 
} 

var random_name = fetch_random(namedarray); 
document.getElementById('question').innerHTML="Q." + random_name +" is capital for which country" 
+0

謝謝..但你可以解釋什麼是obj在這裏,什麼是temp_key和爲什麼你使用鍵[]這裏根據我的例子plz .. – Mihir 2010-12-13 10:58:38

+0

@ Mihir'obj'是傳入的對象。它的工作方式是遍歷對象的所有屬性,並將其添加到數組中,然後我們返回該數組中的隨機元素,該元素在把它傳遞給對象以獲取實際值。 – 2010-12-13 10:59:30

+5

** OBJECT!=== ASSOCIATIVE ARRAY。 RAAAAAAAAAGE !!! ** – 2010-12-13 11:02:01

0

我只想用兩個陣列的數據。

var countries = ['India', 'Australia', 'Indonasia', ... ]; 
var capitols = ['New Delhi', 'Canberra', 'Jakarta', ...]; 

然後插入到你的文字與:

var index = Math.floor(Math.random() * capitols.length); 
document.getElementById('question').innerHTML="Q." +capitols[index]+" is capital for which country"; 

然後,您可以使用index變量來查找答案以後也是如此。

+0

是你說的正確,但它不適用於命名數組..它只是爲普通數組我需要命名數組的答案..非常感謝你 – Mihir 2010-12-13 10:56:46

0

如果你有能力使用庫,你可能會發現Lo-Dash JS庫有這種情況下很多非常有用的方法。在這種情況下,請繼續並檢查示例()。

(注羅短跑約定命名庫對象_。 不要忘記檢查安裝在同一個頁面將其設置爲你的項目。)

_.sample([1, 2, 3, 4]); 
// → 2 

在你的情況下,去提前與用途:

_.sample(namedarray) 

,並在上下文中:

document.getElementById('question').innerHTML="Q." +_.sample(namedarray)+" is capital for which country"; 

在附註上,您可以使用更簡單的表示法來填充數組。

namedarray = { 
    India : 'New Delhi', 
    Australia : 'Canberra', 
    Indonasia : 'Jakarta', 
    Iran : 'Tehrani', 
    Iraq : 'Bhagdad', 
    Nijeria : 'Abuja' 
}