0

可能重复:
从 Javascript 对象中选择随机属性

假设我有一个 javascript 对象:

Config.UI.Area = {
        "uuid": {
            "_type": "string"
        },
        "frame": {
            "_type": "rect"
        },
        "zIndex": {
            "_type": "string"
        }
 }

然后我想通过使用 for 循环来获取每个属性的名称,例如“uuid”、“frame”、“zIndex”:

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],它会返回一个对象,我怎样才能得到它的名字?

4

4 回答 4

5

这将为您提供一组属性名称

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);
    }
}
于 2012-04-05T06:18:41.453 回答
1

下面是你如何迭代属性并获得相应的值

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];
}
于 2012-04-05T06:22:36.543 回答
0

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);
于 2012-04-05T06:26:13.023 回答
0

要在循环中获取对象属性的名称,请使用:

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
  }
}

在一个对象中使用hasOwnPropertyin 循环是一个好主意,因为它会过滤掉通过它继承的对象的属性prototype

于 2012-04-05T06:55:52.847 回答