JavaScript获取对象键名

96

如何获取以下内容的键名?例如,我想要 "button1" 和 "button2"?

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(),但这并没有起作用。


9
如果你的键名实际上是button1button2等等,你可能希望将buttons变成一个数组。 - Zirak
8个回答

112

如果稍微修改一下措辞,可能会更容易理解:

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

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

请注意,这里正在遍历对象的属性,并在每个后续循环中使用property作为每个属性的引用。

MSDN关于for ( variable in [object | array ] )的说明如下:

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

还要注意,对象的属性顺序不是固定的,可能会改变,而数组的索引顺序不同。这可能会有所帮助。


2
你如何获取foo? - Demodave
3
要获取 foo 属性的值,你只需从 buttons 对象中调用它:buttons.foo===buttons['foo']。在 for 循环内部,您将调用 buttons[property]。现在您还可以使用 Array.entries({foo:"bar",fizz:"buzz"}) 来输出 [['foo':'bar'],['fizz','buzz']] - Sampson

75

ECMAscript 5版还提供了实用的方法Object.keys()Object.getOwnPropertyNames()

因此

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

4
这将所有的键以数组形式呈现。如何获取特定键的键名? - Shajeel Afzal
3
我尝试着使用以下代码:Object.keys({myObj.fieldName})[0] - Shajeel Afzal
@ShajeelAfzal 不错的前提,但是你不能在对象中使用索引表达式作为简写赋值。 - sayandcode

11

alert(buttons[i].text); 更改为 alert(i);


8

ES6的更新... 尽管filter和map可能需要自定义。

Object.entries(theObj) 返回一个[[key, value],]数组表示对象,可以使用Javascript的数组方法, .each(), .any(), .forEach(), .filter(), .map(), .reduce()等进行操作。

在迭代对象的部分Object.keys(theObj)Object.values()上节省了大量工作。

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

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

        }
    },
    button3: {
        text: 'Cancel',
        onclick: function(){

        }
    }
}

list = Object.entries(buttons)
    .filter(([key, value]) => `${key}`[value] !== 'undefined' ) //has options
    .map(([key, value], idx) => `{${idx} {${key}: ${value}}}`)
    
console.log(list)


6

变量i是您查找的关键字名称。


5

这是一个简单的例子,可以帮助你获取对象键名。

var obj ={parts:{costPart:1000, salesPart: 2000}}; console.log(Object.keys(obj));

输出结果为parts


5
使用以下方法检索键和值。
 for (let property in buttons) {
    console.log('key:' + property, 'value:'+ buttons[property]);
 }


3

假设您有访问原型的权限,这将起作用。我几分钟前为自己编写了这段代码;我一次只需要一个键,因此对于大量键值对或输出多个键名称来说,这不是时间有效的。

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"

修改原型几乎总是一个非常糟糕的想法。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接