首页 > 解决方案 > 在不修改对象的情况下在 javascript 中获取父级

问题描述

我有original嵌套对象,其中包含巨大的树状结构。这基本上是转换为 JavaScript 对象的 JSON 字符串。

结构就像 -

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

注意:我需要追踪原始对象以找到父对象。我查看了其他答案,但他们提到了如何设计对象结构以获取父对象,但我不想更改原始对象。

标签: javascriptarrays

解决方案


您可以使用循环创建递归函数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)


推荐阅读