84

我将如何获得关注的关键名称?例如,我想要“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()虽然这不起作用。

4

8 回答 8

101

如果您稍微修改一下措辞,这可能会更好地理解:

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 ] )以下内容:

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

另请注意,对象的属性顺序不是恒定的,并且可以更改,这与数组的索引顺序不同。那可能会派上用场。

于 2012-04-26T13:24:02.877 回答
68

ECMAscript 第 5 版还为您提供了简洁的方法Object.keys()Object.getOwnPropertyNames().

所以

Object.keys( buttons );  // ['button1', 'button2'];
于 2012-04-26T13:26:06.860 回答
10

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

于 2012-04-26T13:21:09.993 回答
6

变量i是您看起来的键名。

于 2012-04-26T13:22:35.407 回答
6

ES6 更新……尽管过滤器和映射都可能需要自定义。

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)

于 2019-08-19T05:14:06.923 回答
4

这是一个简单的示例,它将帮助您获取对象键名。

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

输出将是parts

于 2019-02-08T08:14:20.570 回答
3

假设您可以访问 Prototype,这可能会起作用。几分钟前,我为自己编写了这段代码;我一次只需要一个键,因此对于键:值对的大列表或吐出多个键名来说,这不是时间效率。

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"
于 2013-07-10T17:54:47.420 回答
3

要检索键和值,请使用以下内容。

 for (let property in buttons) {
    console.log('key:' + property, 'value:'+ buttons[property]);
 }

于 2021-09-23T10:25:02.813 回答