我有original
个嵌套对象,其中包含巨大的树型结构。这基本上是JSON字符串,可以转换为JavaScript对象。
结构就像-
original = {
type : "table",
children :[
{
type : "cell",
children : [
{
type : "label",
children : []
}
]
}
{
type : "cell",
children : []
}
]
}
我已将项目选择为-
var select = original.children[1].children[0];
我想要的是获得parent
项目中的selected
。
这是示例演示-https://stackblitz.com/edit/angular-v5m9ua
注意:我需要遍历原始对象以找到父对象。我查看了其他答案,但是他们提到了如何设计对象结构以获取父对象,但我不想更改原始对象。
答案 0 :(得分:1)
您可以使用for...in
循环创建递归函数,并返回对象类型的最后一个父元素。
const data = {
type: "table",
children: [{
type: "cell",
children: [{
type: "label",
children: []
}]
}, {
type: "cell",
children: []
}]
}
var select = data.children[0].children[0];
function getParent(data, obj, parent = null) {
let result = null;
(function loop(data, obj, parent) {
if (typeof data == 'object' && !Array.isArray(data)) {
parent = data
}
for (let i in data) {
if (select == data[i]) {
result = parent;
break;
}
if (typeof data[i] == 'object') {
loop(data[i], obj, parent)
}
}
})(data, obj, parent)
return result;
}
let parent = getParent(data, select)
console.log(parent)
答案 1 :(得分:0)
您可以搜索树:
findParent(root, toFind) {
for(const child of root.children || []) {
if(child === toFind){
return root;
}
const result = this.findParent(child, toFind);
if(result){
return result;
}
}
}
可以用作:
findParent(original, select)