【问题标题】:How can I get one property name in a javascript object? [duplicate]如何在 javascript 对象中获取一个属性名称? [复制]
【发布时间】:2012-04-18 21:26:51
【问题描述】:
可能重复:
Pick random property from a Javascript object
假设我有一个 javascript 对象:
Config.UI.Area = {
"uuid": {
"_type": "string"
},
"frame": {
"_type": "rect"
},
"zIndex": {
"_type": "string"
}
}
然后我想获取每个属性的名称,例如“uuid”、“frame”、“zIndex”
通过使用 for 循环:
var prop=config.ui.area;
var arr=new Array()
for(var i in prop){
//do something with prop[i]?
//arr.push(prop[i].....)?
}
我不能直接使用prop[i],它会返回一个对象,我怎样才能得到它的名字?
【问题讨论】:
标签:
javascript
object
properties
【解决方案1】:
这会给你一个属性数组names:
for(var name in prop){
//do something with prop[name]?
arr.push(name);
}
它还会为您提供 Object 对象的“本机”属性的名称。为避免这种情况,请使用hasOwnProperty 方法:
for(var name in prop){
if (prop.hasOwnPropery(name) {
arr.push(name);
}
}
【解决方案2】:
下面是你如何迭代属性并获取相应的值
var prop=config.ui.area;
var arr=new Array()
for(var i in prop){
//do something with prop[i]?
var propertyName = i;
var propertyValue = prop[i];
}
【解决方案3】:
prop(和 Config.UI.Area)是一个对象(不是对象数组)。
所以你不能做 prop[i]。
试试这个,
var obj = {
"uuid": {
"_type": "string"
},
"frame": {
"_type": "rect"
},
"zIndex": {
"_type": "string"
}
}
var prop = obj;
var arr=[];
for(var i in prop){
if(i.hasOwnProperty){
arr.push(i);
}
}
console.log(arr);
【解决方案4】:
要在循环中获取对象属性的名称,请使用:
for(var propertyName in myObject) {
if(myObject.hasOwnProperty(propertyName) {
console.log(propertyName); // will be uuid, frame or zIndex
}
}
要获取子对象的属性,请使用
for(var propertyName in myObject) {
if(myObject.hasOwnProperty(propertyName) {
var subObject = myObject[propertyName];
console.log(subObject._type);
// will string or rect based on your sample code
}
}
在对象的循环中使用hasOwnProperty 是一个好主意,因为它会过滤掉通过其prototype 继承的对象的属性。