【发布时间】:2022-01-12 03:32:59
【问题描述】:
我有一个这种类型的 json 对象。
{
"id": "001",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001"],
"children": [
{
"id": "002",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "002"],
"children": []
},
{
"id": "003",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "003"],
"children": [
{
"id": "00001",
"type": "B",
"children": []
}
]
},
{
"id": "004",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "004"],
"children": [
{
"id": "005",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "004", "005"],
"children": []
},{
"id": "005",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "004", "005"],
"children": [
{
"id": "00002",
"type": "B",
"children": []
}
]
}
]
},
{
"id": "00003",
"type": "B",
"children": []
}
]
}
我需要将所有 type: "B" 对象替换为这种(下面提到的)类型的对象,我可以从具有 ids 作为类型 B 的键的对象中获取该类型的对象。这个类型 B 对象可以嵌套在任何地方作为嵌套子数组的第一个孩子或第五个孩子
{
"id": "002",
"type": "A",
"value": "aaaaa",
"data:": {},
"children": []
},
我该怎么做?这可以是深度嵌套的,并且没有我们应该事先替换对象的特定位置。所以,我需要遍历整个对象并做到这一点。我应该如何完成它?
编辑
我稍微更新了问题中的代码。除了类型化的 B 对象外,每个对象都有一个嵌套的路径属性。因此,当用另一个对象替换键入的 B 属性时,我还需要在其中添加路径。
例如:id 的路径:“00001”,类型 B 对象应为:[“001”,“003”,“00001”]
编辑: 预期结果
{
"id": "001",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001"],
"children": [
{
"id": "002",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "002"],
"children": []
},
{
"id": "003",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "003"],
"children": [
{
"id": "002",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "003", "002"],
"children": []
},
]
},
{
"id": "004",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "004"],
"children": [
{
"id": "005",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "004", "005"],
"children": []
},{
"id": "005",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "004", "005"],
"children": [
{
"id": "002",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "004", "005", "002"],
"children": []
}
]
}
]
},
{
"id": "002",
"type": "A",
"value": "aaaaa",
"data:": {},
"path": ["001", "002"],
"children": []
}
]
}
【问题讨论】:
-
可能是递归函数;具体问题是什么?
-
谢谢@Kinglish。但在这种情况下,我不知道应该事先在哪里替换它,而不是进入对象中的所有路径。所以,我认为这并不像那个答案中提到的那样简单。
-
@DaveNewton 谢谢。是的。我正在为此实现一个递归函数。但是由于我事先不知道在哪里替换,所以我需要遍历对象中的所有路径。想知道是否有任何其他方法或类似的场景
-
这是递归部分。
标签: javascript arrays json object nested