迭代对象的所有子对象和子对象

问题描述 投票:0回答:2

我有一个包含子对象的对象,甚至还有曾孙对象。

我目前正在使用

for (const [key, value] of Object.entries(myObj)) {
  console.log(`${key}: ${value}`);
}

这会产生,例如:

  • 创建时间:2021-01-01T00:00:00.000Z
  • id:字符串
  • 数据:[对象对象]
  • 项目:[对象对象],[对象对象]

如何迭代任意数量的子对象以返回类似的内容

  • 创建时间:2021-01-01T00:00:00.000Z
  • id:字符串
  • 数据:[对象对象]
  • 数据:1 / 1 {内容}
  • 项目:1 / 2 {内容}
  • 项目:2 / 2 {内容}

“1 of 2”不是必需的,但展示了我的输出目标。

javascript object parent-child
2个回答
6
投票

在这种情况下,递归很有用。例如:

function visitDescendants(obj, callback) {
    for (const [key, value] of Object.entries(obj)) {
        if (value && typeof value === "object") {
            // Recurse
            visitDescendants(value, callback);
        } else {
            callback(key, value);
        }
    }    
}

实例:

function visitDescendants(obj, callback) {
    for (const [key, value] of Object.entries(obj)) {
        if (value && typeof value === "object") {
            // Recurse
            visitDescendants(value, callback);
        } else {
            callback(key, value);
        }
    }    
}

const obj = {
    a: 1,
    message: "hi",
    b: {
        nestedMessage: "there",
        c: {
            furtherNestedMessage: "folks!"
        },
    },
};

visitDescendants(obj, (key, value) => {
    console.log(`${key}: ${value}`);
});


0
投票

您可以使用

querySelectorAll("*")
,例如:

const parent = document.getElementById('#parent');
[....parent.querySelectorAll('*')].forEach(x => console.log(x.tagName));

© www.soinside.com 2019 - 2024. All rights reserved.