2010-03-26 23 views
6

ich eine einfache simulierte aArray mit zwei Elemente:javascript „assoziative“ Array-Zugriff

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

ich den Wert mit einem Ereignis wie folgt zugreifen können:

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

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

Allerdings, wenn ich versuchen, zuzugreifen die aarray aus dem Code mit einem Schlüssel, der nur eine nicht explizite Zeichenfolge ist, bekomme ich nicht definiert. Muss ich irgendwie den Parameter mit dem Escape-Schlüssel übergeben? Irgendwelche Ideen? tia.

+0

sollten Sie die Codeformatierung von stackoverflow verwenden – douwe

+1

Vielleicht cp sollte den Bearbeitungsauftrag beenden; Momentan versuchen mehrere Leute, es zu bearbeiten und es scheint einige Unstimmigkeiten darüber zu geben, was cp sagen wollte! –

+0

Wie ist das Array definiert? –

Antwort

18

Der Schlüssel kann eine dynamisch berechnete Zeichenfolge sein. Gib ein Beispiel von etwas, das du passierst, das nicht funktioniert.

Gegeben:

var bowl = {}; // empty object 

Man kann sagen:

bowl["fruit"] = "apple"; 

Oder:

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

Oder auch:

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

Oder wenn Sie es wirklich wollen:

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

alle, haben die gleiche Wirkung auf das bowl Objekt. Und dann können Sie die entsprechenden Muster verwenden, um Werte abzurufen:

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

Ich bin nicht sicher, ob ich Sie verstehen, können Sie sicherstellen, dass der Schlüssel ist eine Zeichenfolge, wie diese

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

Oder Sie können prüfen, ob der Schlüssel existiert:

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

Allerdings glaube ich nicht, dass Sie den non working code gepostet haben?

0

Sie können JSON verwenden, wenn Sie den Schlüssel nicht verlassen möchten.

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

alert(bowl.fruit); 
+2

Das ist nicht JSON. –

+1

Das ist ein Objektliteral. JSON ist ein Datenformat. –