2011-01-12 30 views
0

我正在使用JavaScript地圖存儲密鑰和值。稍後我會檢查指定的鍵是否存在於地圖中,但它有時會給出正確的結果,但有時它不會。我試圖使用console.log(mapname)來打印地圖,它顯示所有的鍵,但是如果我嘗試檢查某個指定的鍵是否存在 - 有時它會給出錯誤的答案。使用javascript地圖/對象的奇怪行爲

我用下面的代碼:

// 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'); 

什麼可以爲可能出現的問題? alphanumericstring /整數值可以用作鍵嗎?

+0

我們可以看到上下文,你'使用這個? 「myMap」在哪裏定義(看起來像在對象文本中)? 'x`是如何創建的(是全局的還是以某種方式作爲參數傳遞的)?你還說過,有時候相同的值會以`x`的形式傳入......當然,當你這樣做時,與舊的x值相關的結果值將被破壞。但我們可以真正使用更多細節。很難通過這麼少的數據來診斷這樣的問題。 – Reid 2011-01-12 05:04:47

+1

該代碼中有幾個語法/引用錯誤。你能發佈你正在使用的實際代碼嗎? – Stephen 2011-01-12 05:47:00

回答

-1

我認爲你必須在一些臨時表或對象,如會話或cookie存儲密鑰以備將來檢索。 您已經在mymap [key]中動態地存儲x位置值,但每次加載並覆蓋新值。你的東西做錯了那裏..

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

要確保你知道,存儲與鍵的值可能爲空,如下面的代碼所示:

a = { 
    "mykey": null 
} 

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