2011-07-06 43 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”。