2012-04-26 141 views
49

我将如何获得关键名称的后续?例如,我想要“button1”和“button2”?Javascript获取对象密钥名称

var buttons = { 
    button1: { 
     text: 'Close', 
     onclick: function(){ 

     } 
    }, 
    button2: { 
     text: 'Close2', 
     onclick: function(){ 

     } 
    } 
} 

var i; 
for(i in buttons){ 
    if(buttons.hasOwnProperty(i)){ 
     alert(buttons[i].text); 
    } 
} 

我试过使用.push()虽然这不起作用。

+5

如果您的密钥名字其实都是'button1','button2'等等,你可能想使'buttons'数组 – Zirak 2012-04-26 13:52:23

回答

61

这可能是更好的理解,如果你修改了措辞了一点:这里

var buttons = { 
    foo: 'bar', 
    fiz: 'buz' 
}; 

for (property in buttons) { 
    console.log(property); // Outputs: foo, fiz or fiz, foo 
} 

注意你遍历对象的属性,使用property为每个后续周期中的引用,每。

MSDN说的for (variable in [object | array ])以下:

一个循环的每次迭代之前,变量分配对象或数组的下一个元素索引的下一属性名称。然后,您可以在循环内的任何语句中使用它来引用对象的属性或数组的元素。

还应注意,对象的属性顺序不是恒定的,并且可以改变,不像数组的索引顺序。这可能会派上用场。

+0

怎么你会得到富? – Demodave 2016-07-12 20:29:46

+0

@Demodave要获得* foo *属性的值,您只需将其从'buttons'对象中调用即可:buttons.foo === buttons ['foo']'。在for循环中,你可以调用'buttons [property]'。今天你也可以使用Array.entries({foo:“bar”,fizz:“buzz”})'输出'[['foo':'bar'],['fizz','buzz']]' 。 – Sampson 2016-07-12 20:47:07

7

变化alert(buttons[i].text);alert(i);

34

ECMAScript第四版5还为您提供了整洁的方法Object.keys()Object.getOwnPropertyNames()

所以

Object.keys(buttons); // ['button1', 'button2']; 
4

假设你有机会获得原型,这可能是工作。几分钟前我为自己写了这段代码;我一次只需要一个密钥,所以这对于键值对的大列表或用于分配多个密钥名称的时间效率不高。

function key(int) { 
    var j = -1; 
    for(var i in this) { 
     j++; 
     if(j==int) { 
      return i; 
     } else { 
      continue; 
     } 
    } 
} 
Object.prototype.key = key; 

这是数组工作方式与数组相同,以节省头痛。在你的代码的情况下:

buttons.key(0) // Should result in "button1"