2010-03-26 64 views
6

我有兩個元素的簡單模擬aarray:JavaScript的「聯想」的數組訪問

onclick="testButton00_('fruit')">with `testButton00_` 

function testButton00_(key){ 
    var t = bowl[key]; 
    alert("testButton00_: value = "+t); 
} 

但是每當我試圖訪問:

bowl["fruit"]="apple"; 
bowl["nuts"]="brazilian"; 

我可以像這樣的事件訪問值從代碼中的aarray,只是一個非明確的字符串,我得到了未定義的鍵。我有某種方式必須通過轉義參數與'鑰匙'。有任何想法嗎? TIA。

+0

你應該使用計算器 – douwe

+1

的代碼格式化也許CP應完成編輯工作;目前有幾個人試圖編輯它,似乎有什麼意見分歧cp打算說! –

+0

數組是如何定義的? –

回答

18

該鍵可以是動態計算的字符串。給出一個你通過的不起作用的例子。

考慮:

var bowl = {}; // empty object 

你可以說:

bowl["fruit"] = "apple"; 

或者:

bowl.fruit = "apple"; // NB. `fruit` is not a string variable here 

甚至:

var fruit = "fruit"; 
bowl[fruit] = "apple"; // now it is a string variable! Note the [ ] 

或者,如果你真的想:

bowl["f" + "r" + "u" + "i" + "t"] = "apple"; 

這些都有bowl對象相同的效果。然後你就可以使用相應的模式來檢索值:

var value = bowl["fruit"]; 
var value = bowl.fruit; // fruit is a hard-coded property name 
var value = bowl[fruit]; // fruit must be a variable containing the string "fruit" 
var value = bowl["f" + "r" + "u" + "i" + "t"]; 
0

我不知道我理解你,你可以確保關鍵是這樣的

if(!key) { 
    return; 
} 
var k = String(key); 
var t = bowl[k]; 

或者你也可以檢查一個字符串關鍵存在:

if(typeof(bowl[key]) !== 'undefined') { 
    var t = bowk[key]; 
} 

但是,我不認爲你已經發布了非工作代碼?

0

如果您不想逃避密鑰,則可以使用JSON。

var bowl = { 
    fruit : "apple", 
    nuts : "brazil" 
}; 

alert(bowl.fruit); 
+2

這不是JSON。 –

+1

這是一個對象文字。 JSON是一種數據格式。 –