循环嵌套对象

时间:2018-04-07 10:09:44

标签: javascript object

目前我有一个对象,我正在遍历它以获得如下输出:

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 + /等。 ?

1 个答案:

答案 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; }