javascript - 循环遍历带有数组的嵌套对象
问题描述
我有以下对象:
{
"models": [
{
"_id": "5d4a9c6a9b2de73738c7e15b",
"children": [
{
"id": "a1",
"name": "a1",
"children": [
{
"id": "a2",
"name": "a2",
"children": [
{
"id": "a3",
"name": "a3",
"children": [],
"data": {
"importance": 3
}
},
{
"id": "a4",
"name": "a4",
"children": [
{
"id": "a5",
"name": "a5",
"children": [],
"data": {
"importance": 4
}
}
]
}
]
}
]
},
{
"id": "a6",
"name": "a6",
"children": [
{
"id": "a7",
"name": "a7",
"children": [
{
"id": "a8",
"name": "a8",
"children": [
{
"id": "a9",
"name": "a9",
"children": [],
"data": {
"importance": 2
}
}
]
}
]
}
]
}
]
}
]
}
我想遍历整个对象和他的孩子,所以我可以得到最后一个孩子的 id,在上面的例子中,我想让父母 a1有孩子 a3 和 a5,父母 a6有孩子 a9。
A 在我的主对象中有嵌套对象的数组,所以我for .. in对我不起作用
解决方案
您可以使用递归函数来获得所需的结果。请参阅下面的解决方案。
const data = {
"models": [{
"_id": "5d4a9c6a9b2de73738c7e15b",
"children": [{
"id": "a1",
"name": "a1",
"children": [{
"id": "a2",
"name": "a2",
"children": [{
"id": "a3",
"name": "a3",
"children": [],
"data": {
"importance": 3
}
},
{
"id": "a4",
"name": "a4",
"children": [{
"id": "a5",
"name": "a5",
"children": [],
"data": {
"importance": 4
}
}]
}
]
}]
},
{
"id": "a6",
"name": "a6",
"children": [{
"id": "a7",
"name": "a7",
"children": [{
"id": "a8",
"name": "a8",
"children": [{
"id": "a9",
"name": "a9",
"children": [],
"data": {
"importance": 2
}
}]
}]
}]
}
]
}]
};
function getLastChildren(obj, lastChildren) {
if (obj.children.length) {
obj.children.forEach((child) => {
getLastChildren(child, lastChildren)
});
} else {
lastChildren.push(obj);
}
}
data.models[0].children.forEach((child) => {
console.log("Parent ", child.id);
const children = [];
getLastChildren(child, children);
console.log("Children ", children.map(c => c.id).join(", "));
});
推荐阅读
- java - 杰克逊反序列化错误:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段
- python - Peewee ORM:如何在列值中获取()?
- html - Chrome url bar 与 100vh 与 css
- javascript - 从 Bootstrap 导航栏切换外观后选择搜索框
- material-ui - 带标签的图标按钮
- flutter - FlutterWeb - 显示目录中的所有图像
- bash - Bash sed 与贪婪的正则表达式
- sql - 如何在 PostgreSQL 中加入两个“未命名的表/选择”?
- jenkins - 启动和停止作业的功能
- javascript - Angular 没有“访问控制允许来源”