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

时间:2016-10-09 12:37:21

标签: javascript json

我有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: "" } } }; 的作品吗?

2 个答案:

答案 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)

递归是您正在寻找的。 你需要:

#1创建一个接收对象的函数,并测试它的父属性中是否有任何内容。

#2如果您的object.parent有数据,则必须在该对象内迭代。迭代(OBJ.parent)

#3如果你的对象没有数据,那么这必须是最后一个元素,(返回OBJ)。

解决此问题后,您可以尝试使用多个父节点重新解决此问题,并尝试打印最新节点中的所有元素



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: ""
          }]
       }
}