在javascript中获取父对象而不修改对象

在javascript中获取父对象而不修改对象,javascript,arrays,Javascript,Arrays,我有一个原始的嵌套对象,它包含了巨大的树状结构。这基本上是转换为JavaScript对象的JSON字符串 结构如—— original = { type : "table", children :[ { type : "cell", children : [ { type : "label",

我有一个原始的嵌套对象,它包含了巨大的树状结构。这基本上是转换为JavaScript对象的JSON字符串

结构如——

original = {
       type :  "table",
       children :[
           {
             type : "cell",
             children : [
                {
                   type : "label",
                   children : []
                }
             ]
           }
           {
             type : "cell",
             children : []
           }
       ]
    }
我已选择以下项目:

var select = original.children[1].children[0];
我想要的是获取所选项目的父级

这是示例演示-

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


您可以搜索树:

 findParent(root, toFind) {
    for(const child of root.children || []) {
      if(child === toFind){
         return root;
      } 
      const result = this.findParent(child, toFind);
      if(result){
        return result;
      } 
    }
}
可以用作:

  findParent(original, select)

您可以使用for…in循环创建递归函数,并返回对象类型的最后一个父元素

常数数据={ 类型:表格, 儿童:[{ 类型:电池, 儿童:[{ 类型:标签, 儿童:[] }] }, { 类型:电池, 儿童:[] }] } var select=data.children[0]。children[0]; 函数getParentdata,obj,parent=null{ 设result=null; 函数loopdata,对象,父对象{ 如果数据类型=='object'&&!Array.isArraydata{ 父项=数据 } 让我输入数据{ 如果选择==数据[i]{ 结果=父母; 打破 } 如果数据类型[i]=“对象”{ loopdata[i],对象,父对象 } } }数据,对象,父对象 返回结果; } 让parent=getParentdata,选择
安慰logparent@mirakurun和@Andy我已经检查了被称为重复的答案,但有点不同,因为我没有选择修改原始对象。@SunilSingh-这没有什么不同。如果你不能实现这个解决方案,那么你就无法解决这个问题。那么就没有办法将已知的祖先对象向下遍历到你正在寻找的对象,但是根据你的问题,你已经知道了,那么这种方法有什么问题?@Quentin-这真的很奇怪。你强迫某人实施解决方案,仅仅是因为它在你看来是正确的,而且它的得票率最高。你至少不能让别人帮你。我无法从解决方案创建问题状态。反之亦然。你本可以在副本中添加新答案,而不是重新打开此问题。@quentin。问题是不同的。这就是我重新打开的原因。它正在处理所选项目this.parent.children[0],但不处理'this.parent.children[1];`-这是演示-@sunil,因为结构不同。所有节点都必须有一个children属性,或者您必须处理root.children未定义的情况。我编辑了对我有用的答案。它需要更多的测试,但目前看起来还不错。感谢您的帮助:您的实现可以处理更复杂的未知树结构,包括我的案例。然而@Jonas Wilms的答案非常简单,符合我的要求。谢谢你的回答: