我有一个对象名称数组
['obj','obj2','objN']
这些对象是对象中的节点
{
obj: {
key: value,
key2: value,
}
obj2:{
key3: value
}
...
}
我知道我可以做一个对象:
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key)
}
}
但是可以循环遍历多个对象的所有键而不进行任何重复吗?
答案 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()
var data = {
obj: {
key: 1,
key2: 2,
},
obj2:{
key3: 3
}
};
for (var key in data) {
console.log(Object.keys(data[key]))
}
&#13;