Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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
Javascript 如何获取嵌套json对象数组中子Id的直接父Id?_Javascript_Node.js_Json_Recursion_Nested - Fatal编程技术网

Javascript 如何获取嵌套json对象数组中子Id的直接父Id?

Javascript 如何获取嵌套json对象数组中子Id的直接父Id?,javascript,node.js,json,recursion,nested,Javascript,Node.js,Json,Recursion,Nested,我需要获取特定子项的父id 这是我的JSON示例,如果我给实体id 32,它应该返回6作为父id,如果我给30,它应该返回5作为父id const arr=[{ “id”:0, “名称”:“我的实体”, “儿童”:[ { “id”:1, “名称”:“市场”, “儿童”:[ { “id”:2, “名称”:“销售”, “儿童”:[ { “id”:3, “名称”:“1区”, “儿童”:[ { “id”:5, “名称”:“区域1”, “儿童”:[ { “实体ID”:30, “id”:26, “名称”:“

我需要获取特定子项的父id

这是我的JSON示例,如果我给实体id 32,它应该返回6作为父id,如果我给30,它应该返回5作为父id

const arr=[{
“id”:0,
“名称”:“我的实体”,
“儿童”:[
{
“id”:1,
“名称”:“市场”,
“儿童”:[
{
“id”:2,
“名称”:“销售”,
“儿童”:[
{
“id”:3,
“名称”:“1区”,
“儿童”:[
{
“id”:5,
“名称”:“区域1”,
“儿童”:[
{
“实体ID”:30,
“id”:26,
“名称”:“孟买”
},
{
“实体ID”:31,
“id”:26,
“名称”:“海得拉巴”
}
],
“num”:0,
},
{
“id”:6,
“名称”:“区域2”,
“儿童”:[
{
“实体ID”:32,
“id”:32,
“姓名”:“卡纳塔克邦”
},
{
“实体ID”:33,
“id”:33,
“名称”:“安得拉邦”
}
],
“num”:0,
},
]
},
]
},
]
},
]
}]
这是我尝试过的代码

const findParent=(arr,entityId)=>{
for(设i=0;i
但它正在像下面那样回归

[
    5,
    3,
    2,
    1,
    0
]
但我希望输出是

[
  5
]
请在此方面帮助我,谢谢

替换此:

t.push(arr[i].id);
与:


我建议更简单的解决办法

const findParent = (arr, entityId) => {
  const children = arr.flatMap(parent => 
    (item.children || []).map(child => ({ parent, child, entityId: child.entityId }))
  )

  const res = children.find(item => item.entityId === entityId)
  return res.entityId || findChildren(res.map(v => v.child), entityId)
}

哇!一切正常,谢谢你,特林科特先生。如果可能的话,请告诉我它是如何工作的。这个额外的条件使得
push
只执行一次。下次遇到此
if
,数组已经有一个元素,因此该条件不再为真。因此,在原始代码中附加到数组的所有其他值现在不再附加到数组中。
const findParent = (arr, entityId) => {
  const children = arr.flatMap(parent => 
    (item.children || []).map(child => ({ parent, child, entityId: child.entityId }))
  )

  const res = children.find(item => item.entityId === entityId)
  return res.entityId || findChildren(res.map(v => v.child), entityId)
}