循环遍历多个对象的所有键一次?

时间:2015-09-25 20:37:09

标签: javascript

我有一个对象名称数组

['obj','obj2','objN']

这些对象是对象中的节点

{
  obj: {
    key: value,
    key2: value,
  }
  obj2:{
    key3: value
  }
...
}

我知道我可以做一个对象:

for (var key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key)
  }
}

但是可以循环遍历多个对象的所有键而不进行任何重复吗?

2 个答案:

答案 0 :(得分:1)

假设父容器对象的格式为:

var parentObj = 
{
    obj: {
        key: value,
        key2: value,
    }
    obj2: {
        key3: value
    }
    ...
}

此外,如果我们只想包含每个子键一次, 我们有

var objNameArray = ['obj','obj2','objN'];
var allValues = [];
var usedKeys = {};

for(var i = 0; i < objNameArray.length; ++i){
    // If the parent object does not have a matching sub-object, skip to the
    // next iteration of the loop
    if(!parentObj[objNameArray[i]]) {
        continue;
    }
    var currentObj = parentObj[objNameArray[i]];
    var subKeys = Object.keys(currentObj);
    for(var j = 0; j < subKeys.length; ++j) {
        if(usedKeys[subKeys[j]]) {
            continue;
        }
        usedKeys[subKeys[j]] = true;
        allValues.push(currentObj[subKeys[j]]);
    }
}

每个子对象中所有键的所有值都将在数组allValues中,并且通过调用Object.keys(usedKeys);可以获得每个子对象的所有键。请注意,如果子对象也可以包含子对象,则需要调整此策略以支持递归。

答案 1 :(得分:0)

如果正确解释问题,请尝试使用Object.keys()

&#13;
&#13;
var data = {
  obj: {
    key: 1,
    key2: 2,
  },
  obj2:{
    key3: 3
  }
};

for (var key in data) {
  console.log(Object.keys(data[key]))
}
&#13;
&#13;
&#13;