Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用脚本类型从JSON的嵌套对象中的子对象获取父对象_Json_Angular_Typescript_Tree - Fatal编程技术网

使用脚本类型从JSON的嵌套对象中的子对象获取父对象

使用脚本类型从JSON的嵌套对象中的子对象获取父对象,json,angular,typescript,tree,Json,Angular,Typescript,Tree,是否可以从子对象动态获取父对象?本质上,我所要做的就是动态检索属于子对象父对象的属性的值。例如,在下面的Json中,我想提取特定汽车的驾驶员: { "driver": [ { "id": 1, | "name": "Bob", |=> this is the parent "age": "34", |

是否可以从子对象动态获取父对象?本质上,我所要做的就是动态检索属于子对象父对象的属性的值。例如,在下面的Json中,我想提取特定汽车的驾驶员:

   {
        "driver": [
            {
                "id": 1,       |
                "name": "Bob", |=> this is the parent
                "age": "34",   |
                "car": [
                    {
                        "make": "BMW",     |
                        "model": "3.20",   | this is the child
                        "colour": "Silver",|
                        "mileage": [
                            {
                                "total": "350523",
                                "year": [
                                    {
                                        "2011": "3535",
                                        "2012": "7852",
                                        "2013": "8045"
                                    }
                                ],
                                "month": [
                                    {
                                        "december": "966",
                                        "november": "546",
                                        "october": "7657"
                                    }
                                ]
                            }
                        ]
                    }
                ]
         }
        ]
    }

无论您选择什么策略,您基本上都会迭代并返回。所以我觉得最好的策略是使用你最熟悉的东西

Typescript只是Javascript。因此,如果您对Javascript ey函数式编程方式感到满意,那么可以使用数组映射和过滤器

当然,您必须处理您没有指定的特定于应用程序的逻辑,就像在不同的驱动程序之间存在相同的品牌/型号时发生的情况一样

如果您对函数式编程不熟悉,您可以构建一系列映射,然后执行查找

但如果您需要正确操作,请始终做您喜欢做的事情。

使用for循环:

for(let parent of data.driver) {
   for(let car of parent.car) {
      if(car.make === 'BMW') {
          // can do what you like with 'parent'
      }
   }
}
使用过滤器或查找标准javascript:

drivers_who_drive_bwm = data.driver.filter((parent) => {
    // find() will give -1, if no car was found that matched 
    //    car.make === 'BWM'
    return parent['car'].find((car) => car.make === 'BWM') !== -1
})
此外:


您的命名约定令人困惑。我希望driver.car是一辆车,在你的代码中是一组车。如果它总是包含一辆车,那么最好不要使用数组。司机也一样。更好的键应该是。drivers来指示多个驱动程序。但也许它是XML转换成json的,在这种情况下,您会被它卡住吗?

要回答这个问题,对象引用只是一个内存位置。这里没有父母的概念。它可能没有任何父对象,只是作为父对象的逻辑思维,因此可能没有任何其他对象具有引用它的属性,或者可能有许多对象引用了相同的内存位置,即逻辑上的多个父对象

1> 因此,您可以通过编程将父引用放置到每个子元素。注意,这里您不能解析JSON字符串,因为它只包含JSON数据,不能作为可解析的引用


2> 或者根据您的条件,尝试找出驱动程序对象,即父对象具有包含您的值的子对象。您可以使用javascript中的过滤器、数组函数映射来实现这一点。但不管你在做什么,都只是迭代和查找。在这种情况下,underscrore js将是一个很好的库,可以使用

哪个是父,哪个是子。你到底在找什么?你能再检查一下这个问题吗??我澄清了您将如何获取父组件驱动程序信息。你在哪里使用它?你想找到使用子对象的父对象吗?是的,就是这样,我想找到使用子对象的父对象这就是我要找的,谢谢