javascript - 循环遍历嵌套对象

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

最佳答案

您可以通过检查实际项目来使用迭代和递归方法,如果它是一个对象,则通过保留该对象的路径来迭代该对象。

稍后使用路径和值。

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/

相关文章:

delphi - 如何释放接口(interface)对象 (Delphi 7)

jquery - 将输入值转换为对象数组

javascript - 突出显示事件 DIV 中的元素

javascript - 如何在node js中使用多线程修改同一个数组?

javascript - 实例属性与原型(prototype)属性

c# - 使用对象而不是 this 获取锁 - 线程

javascript - 将数组值与对象进行比较

javascript - 如何防止 JavaScript 上的双重绑定(bind)?

javascript - 使用 anchor 标记<a>下载文件时如何获取下载时间?

java - 在 Java 中使用 PrintWriter 打印到文件无法使用文件名