我有foo
object
,它是动态对象 - foo
对象可以有一个嵌套的parent
object
,它也可以有一个嵌套的{{ 1}} parent
等等。在这种情况下,最好的方法是:
1)获取具有父项的最后一个对象?
2)使用所有嵌套的父对象+第一个obj(foo.obj)填充数组?
object
这是 foo: {
caption: "Italian",
code: "",
id: 17,
parent: {
caption: "Restaurants",
code: "",
id: 9,
parent: {
caption: "Food and Drink",
code: "food_and_drink",
id: 1,
parent: ""
}
}
};
的作品吗?
答案 0 :(得分:1)
如果你只使用香草JS。
1a上。循环方法:
function findLastParent(el) {
var parent = el,
notFound = true;
while (notFound) {
if (parent.parent) {
parent = parent.parent
} else {
notFound = false;
}
}
return parent;
}
1b中。使用递归方法(小心调用堆栈大小,每次创建新函数指针时都是cuz):
function findLastParent(el) {
if (el.parent) {
return findLastParent(el.parent)
} else {
return el
}
}
2a上。递归的方法(循环将类似于1点的代码):
function getAsArray(el, acc) {
acc.push(el);
if (el.parent) {
return getAsArray(el.parent, acc);
} else {
return acc;
}
}
var result = getAsArray(root,[]);
答案 1 :(得分:0)
递归是您正在寻找的。 你需要:
解决此问题后,您可以尝试使用多个父节点重新解决此问题,并尝试打印最新节点中的所有元素
foo: {
caption: "Italian",
code: "",
id: 17,
parent: {
caption: "Restaurants",
code: "",
id: 9,
parent:[ {
caption: "Chairs and Tables",
code: "chairs_and_tables",
id: 2,
parent: ""
},
{
caption: "Food and Drink",
code: "food_and_drink",
id: 1,
parent: ""
}]
}
}