如何在JavaScript中操作对象结构

时间:2011-01-31 17:11:49

标签: javascript

var obj = {
   skill:{
      eat:true,
      walk:true
   },
   address:{
      home:"where",
      company:"where"
   }
};

我可以通过以下方式获得一件商品:

tester.activate(obj[skill]);

我如何获得所有物品?

2 个答案:

答案 0 :(得分:5)

您可以使用for ... in迭代对象的属性:

for (var k in obj) {
  if (obj.hasOwnProperty(k)) {
    var value = obj[k];
    alert("property name is " + k + " value is " + value);
  }
}

对“hasOwnProperty”函数的调用是为了防止此代码迭代“obj”上存在的实际从Object原型继承的属性。 有时你可能想要包括那些,但在这种情况下,过滤它们是安全的(我认为)。 (并且@sdleihssirhc指出,如果你想真的确定,你可以使用Object.prototype.hasOwnProperty.call(obj, k)

答案 1 :(得分:1)

如果你需要技能,你可以获得

obj.skill

如果您需要地址,可以获得

obj.address

或者如果您想获取个人数据:

var eat = obj.skill.eat;
var company = obj.address.company;

如果您想要所有项目,您可以遍历结构并将所有项目推送到数组

function pushObjToArray(obj, array) {
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
             if (obj[key] instanceof Array) {
                  pushObjToArray(obj[key], array);
             } else if (obj[key] instanceof Object) {
                  pushObjToArray(obj[key], array);
             } else {
                  array.push(obj[key]);
             }
        }
    }
    return array;
}

var array = [];
pushObjToArray(array, obj);

第二个想法是破坏密钥并将所有数据推送到数组是没有用的。

你有什么想做的?

您可能正在寻找类似_.flatten

的内容