2011-01-12 7 views
0

Ich benutze JavaScript-Map, um Schlüssel und Werte zu speichern. Später überprüfe ich, ob der angegebene Schlüssel in der Karte vorhanden ist oder nicht, aber manchmal gibt es korrekte Ergebnisse, manchmal nicht. Ich habe versucht, die Karte mit console.log(mapname) zu drucken, es zeigt alle Schlüssel, aber wenn ich versuche zu überprüfen, ob ein bestimmter Schlüssel vorhanden ist - manchmal gibt es falsche Antwort.seltsames Verhalten mit Javascript Karte/Objekt

sind mit folgendem Code:

// following code is called n times in loop with different/same vales of x 
myMap : new Object(); 
var key = x ; // populated dynamically actually 
myMap[key] = "dummyval"; 
if(myIdMap[document.getElementById("abc").value.trim()] != null) 
    alert('present'); 
else 
    alert('not present'); 

Was das mögliche Problem sein kann? Können alphanumerische Zeichenketten/ganze Zahlen als Schlüssel verwendet werden?

+0

Können wir den Zusammenhang sehen, dass Sie nimmst du das? Wo ist 'myMap' definiert (sieht aus wie in einem Objektliteral)? Wie wird 'x' erstellt (ist es ein globales oder irgendwie als Argument übergeben)? Sie haben auch gesagt, dass manchmal dieselben Werte als "x" übergeben werden ... der resultierende Wert, der dem alten Wert von "x" zugeordnet ist, wird natürlich zerstört, wenn Sie das tun. Aber wir könnten wirklich mehr Details verwenden. Es ist schwierig, ein Problem wie dieses mit so wenig zu diagnostizieren. – Reid

+1

gibt es mehrere Syntax-/Referenzfehler in diesem Code. können Sie den tatsächlichen Code posten, den Sie verwenden. – Stephen

Antwort

-1

Ich glaube, Sie haben Schlüssel in einer temporären Tabelle oder Objekte wie Sitzung oder Cookies zu speichern, für die Zukunft abrufen. Sie haben den Positionswert x in mymap [key] dynamisch gespeichert, aber jedes Mal, wenn Sie Ihre neuen Werte laden und überschreiben. Sie etwas falsch es tun ..

+0

danke für die antwort, aber das problem, wenn ich karte drucken zeigt mir richtige schlüssel, und ich überprüfe, ob dieser schlüssel vorhanden ist es funktioniert nicht richtig. – akshay

+0

kann u Problem im Detail beschreiben, damit ich es überprüft .. –

+0

Problem ist, druckt es für Schlüssel „nicht presnt“, die – akshay

0
var myMap = {}; 
// ... 

//simulating your inner loop; is this close enough? 
//Note: A MacGuffin is a plot device to move the story forward. 
// Like a time machine, or a space ship. 
for (var key in macGuffin) { 
    myMap[key] = macGuffin.processItem(key); 
} 

// ... 
var myKey = document.getElementById("abc").value.trim(); 
//Note the use of !==; false == null == 0 == '', but null only === null 
if (myMap[myKey]!==null) 
//Better? (typeof myMap[myKey] != 'undefined') 
    console.log('present'); 
else 
    console.log('not present'); 
0

Seien Sie sicher, dass Sie sich bewusst sind, dass die mit dem Schlüssel gespeicherten Wert null sein könnte, wie der folgende Code zeigt:

a = { 
    "mykey": null 
} 

for (x in a) { 
    if (a[x] == null) { 
     alert(x + " is null!"); 
    } 
} // produces a single alert: "mykey is null!"