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

JSON: Drill down & manipulate nested objects

本文关键字:操作 嵌套 对象 钻取 JSON      更新时间:2023-09-26

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

1)得到最后一个有父对象?

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

 foo: {
    caption: "Italian",
    code: "",
    id: 17,
    parent: {
       caption: "Restaurants",
       code: "",
       id: 9,
       parent: {
          caption: "Food and Drink",
          code: "food_and_drink",
          id: 1,
          parent: ""
      }
   }
};

while的作品吗?

如果你只使用普通JS。

1。使用loop:

处理
function findLastParent(el) {
    var parent = el,
        notFound = true;
    while (notFound) {
        if (parent.parent) {
            parent = parent.parent
        } else {
            notFound = false;
        }
    }
    return parent;
}

1 b。使用递归方法(注意调用堆栈的大小,因为每次创建新的函数指针时):

function findLastParent(el) {
    if (el.parent) {
        return findLastParent(el.parent)
    } else {
        return el
    }
}

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

function getAsArray(el, acc) {
    acc.push(el);
    if (el.parent) {
        return getAsArray(el.parent, acc);
    } else {
        return acc;
    }
}
var result = getAsArray(root,[]);

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

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

#2如果你的对象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: ""
          }]
       }
}