Javascript JSON:向下钻取&;操纵嵌套对象

Javascript JSON:向下钻取&;操纵嵌套对象,javascript,json,Javascript,Json,我有这个foo对象,它是动态对象-foo对象可以有一个嵌套的父对象,它也可以有一个嵌套的父对象等等。。在这种情况下,最好的方法是什么: 1) 获取具有父对象的最后一个对象 2) 用所有嵌套的父对象+第一个对象(foo.obj)填充数组 这是一个而的作品吗?递归性是你想要的。 您需要: #1创建一个函数来接收对象,并测试其父属性中是否有任何内容。 #2如果object.parent有数据,则必须在该对象内迭代。迭代(对象父对象) #3如果对象没有数据,则这必须是最后一个元素(返回OBJ)。 解决此

我有这个
foo
对象
,它是动态对象-
foo
对象可以有一个嵌套的
父对象
,它也可以有一个嵌套的
父对象
等等。。在这种情况下,最好的方法是什么:

1) 获取具有父对象的最后一个对象

2) 用所有嵌套的父对象+第一个对象(foo.obj)填充数组


这是一个
的作品吗?

递归性是你想要的。 您需要:

#1创建一个函数来接收对象,并测试其父属性中是否有任何内容。 #2如果object.parent有数据,则必须在该对象内迭代。迭代(对象父对象) #3如果对象没有数据,则这必须是最后一个元素(返回OBJ)。 解决此问题时,可以尝试使用多个父节点/节点再次解决此问题,并尝试打印最新节点中的所有元素

foo:{
描述:“意大利语”,
代码:“,
身份证号码:17,
家长:{
描述:“餐厅”,
代码:“,
id:9,
家长:[{
描述:“椅子和桌子”,
代码:“椅子和桌子”,
id:2,
家长:“
},
{
描述:“食物和饮料”,
代码:“食物和饮料”,
id:1,
家长:“
}]
}

}
如果您只使用vanilla JS

1a。环进近:

function findLastParent(el) {
    var parent = el,
        notFound = true;
    while (notFound) {
        if (parent.parent) {
            parent = parent.parent
        } else {
            notFound = false;
        }
    }
    return parent;
}
1b。递归方法(每次创建新函数指针时都要注意调用堆栈的大小):

2a。使用递归的方法(使用循环类似于从1点开始的代码):


这是一个家庭作业,不是吗?这是一个递归函数的工作。你可以使用while循环,有一个变量在遇到最后一个父对象时保存它,并在每次遇到父对象时推送到数组上。或者,如上所述,您可以使用一个递归函数,该函数接受一个对象和一个数组,除了将修改后的数组和找到的第一个父对象作为新对象传递给该函数之外,还可以执行与上面相同的操作。
function findLastParent(el) {
    var parent = el,
        notFound = true;
    while (notFound) {
        if (parent.parent) {
            parent = parent.parent
        } else {
            notFound = false;
        }
    }
    return parent;
}
function findLastParent(el) {
    if (el.parent) {
        return findLastParent(el.parent)
    } else {
        return el
    }
}
function getAsArray(el, acc) {
    acc.push(el);
    if (el.parent) {
        return getAsArray(el.parent, acc);
    } else {
        return acc;
    }
}
var result = getAsArray(root,[]);