2011-07-06 72 views
0

問題:在for退出後如何保留鍵名。如果我將密鑰字符串分配給「for in」範圍之外的變量,它將變成一個數字。有什麼辦法來防止這種情況並保持關鍵的名字?由於如何保留「for in」範圍之外的對象鍵名? Javascript

例子:

var lastItem = undefined; 

function getKeyNames(obj, key, val) { 
    var objects = []; 
    for (var i in obj) { 
     if (!obj.hasOwnProperty(i)) continue; 
     if (typeof obj[i] == 'object') { 
      lastItem = i;    
      objects = objects.concat(getObjects(obj[i], key, val)); 
     } else if (i == key && obj[key] == val) { 
      alert (lastItem); 
      objects.push(obj); 
     } 
    } 
    return objects; 
} 
alert (lastItem); 

函數內部警報(和內中)outputes關鍵的實際字符串名稱,但是當我提醒功能外,我得到了一些。任何想法如何保留密鑰的字符串名稱?只是爲了說清楚我並不是在談論對象的價值,而是在談論關鍵的實際名稱。

+1

該代碼不完整。你在哪裏調用'getKeyNames()'? – slebetman

+0

第一個「if」語句後的縮進會導致語法混淆錯誤(太多的大括號)。你能解決這個問題嗎? – maerics

+0

另外,如何定義「getObjects」函數? – maerics

回答

2

正常工作:

var foo = { foo : 22, bar : 42 }; 
for(var i in foo); 
alert(i); // "bar" 

究竟什麼是你傳遞給函數?

0

你的例子看起來不錯。在調用getKeyNames後,lastValue將保存在對象中找到的最後一個鍵。

但是,您的示例不會撥打getKeyNames,因此alert(lastValue)應該提醒「未定義」。

如果你打電話給某個地方,你發現lastValue包含一個數字,很可能是因爲你的對象包含一個數字。例如,for (var i in ['a','b','c'])將迭代「長度」,「0」,「1」,「2」。