目前我有一个对象,我正在循环它以获得如下输出:
var obj = {
"first": {
"Bob": {
"1": "foo",
"2": "bar"
},
"Jim": {
"1": "baz"
}
},
"second": {
"Bob": {
"1": "qux"
},
"Jim": {
"1": "quux"
},
},
}
for (let position in obj) {
console.log(`In ${position} position`);
let pos = obj[position];
for (let name in pos) {
person = pos[name];
for (let item in person) {
let thing = person[item];
console.log(`${position} ${name} ${item} ${thing}`)
}
}
}
但是,我觉得这可能是一种困惑的方法,因为我嵌套了多个 for
循环,有没有更干净的方法来执行此操作?也许利用 ES6/ES7+/等等。 ?
最佳答案
您可以通过检查实际项目来使用迭代和递归方法,如果它是一个对象,则通过保留该对象的路径来迭代该对象。
稍后使用路径和值。
function iter(object, path = []) {
Object.keys(object).forEach(k => {
var temp = path.concat(k);
if (object[k] && typeof object[k] === 'object') {
iter(object[k], temp);
return;
}
console.log(path.join('>'), object[k]);
});
}
var data = { first: { Bob: { "1": "foo", "2": "bar" }, Jim: { "1": "baz" } }, second: { Bob: { "1": "qux" }, Jim: { "1": "quux" } } };
iter(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 循环遍历嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49706234/