目前我有一个对象,我正在遍历它以获得如下输出:
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 + /等。 ?
答案 0 :(得分:5)
您可以通过检查实际项目以及它是否为对象来使用迭代和递归方法,然后通过保留此对象的路径来迭代此对象。
稍后使用路径和值。
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; }