我如何获得以下关键名称?例如,我想要“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()
虽然这不起作用。
答案 0 :(得分:72)
如果您稍微修改了一些措辞,可能会更好地理解这一点:
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 ] )
以下内容:
在循环的每次迭代之前,为变量分配对象的下一个属性名称或数组的下一个元素索引。然后,您可以在循环内的任何语句中使用它来引用对象的属性或数组的元素。
另请注意,对象的属性顺序不是常量,并且可以更改,与数组的索引顺序不同。这可能会派上用场。
答案 1 :(得分:43)
ECMAscript第5版还为您提供了简洁的方法Object.keys()
和Object.getOwnPropertyNames()
。
所以
Object.keys( buttons ); // ['button1', 'button2'];
答案 2 :(得分:7)
将alert(buttons[i].text);
更改为alert(i);
答案 3 :(得分:4)
变量i
是您的关键名称。
答案 4 :(得分: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"
答案 5 :(得分:0)
这是一个简单的示例,将帮助您获取对象键名称。
var obj ={parts:{costPart:1000, salesPart: 2000}};
console.log(Object.keys(obj));
输出将是“零件”;
答案 6 :(得分:0)
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)