首页 > 解决方案 > 如何在嵌套对象中搜索值并检索父值?

问题描述

我有一个嵌套对象数组,其中一个看起来像这样(我已经压缩了整个对象,因为它太大了,jsonArr[0].data是对象所在的位置):

var jsonArr =  {
"data": [{
  "id": 5201,
  "name": "Simple Engineering",
  "contracts": [{
    "id": 461,
    "contract_type_id": 99,
    "contract_status_id": null,
    "pivot": {
        "entity_id": 5201,
        "contract_id": 461
    },
    "projects": [{
        "id": 2785,
        "name": "Something Hydro",
        "pivot": {
            "contract_id": 461,
            "project_id": 2785
        }
     }]
   }]
 }]
}

我有另一个值数组:

 var ids = [461,452,478,655]

我正在尝试找出一种将值匹配到值ids的方法data.contracts.id。如果一个值匹配,那么我想检索data.nameand projects.id

所以在这种情况下,结果将是一个如下所示的数组,仅461匹配:

 var names = ["Simple Engineering",2785]

我希望这是有道理的。当我正在处理一个由多个对象组成的数组时,我需要一种迭代每个ids值和每个数组对象的方法。谢谢,我很感激任何帮助。

标签: javascriptarraysobjectiterator

解决方案


var jsonArr =  {
"data": [{
  "id": 5201,
  "name": "Simple Engineering",
  "contracts": [{
    "id": 461,
    "contract_type_id": 99,
    "contract_status_id": null,
    "pivot": {
        "entity_id": 5201,
        "contract_id": 461
    },
    "projects": [{
        "id": 2785,
        "name": "Something Hydro",
        "pivot": {
            "contract_id": 461,
            "project_id": 2785
        }
     }]
   }]
 }]
}
var ids = [461,452,478,655]
var names=[]
var matched = jsonArr.data?.map(d=>d?.contracts?.map(con=>con?.projects?.map(proj=>{
   if(proj?.pivot?.contract_id===ids.find(id=>id===proj?.pivot?.contract_id))
   {
    names.push(d?.name)
    names.push(proj?.pivot?.project_id)
   }     
})))
console.log(names)

var names=[]
var matched = jsonArr.map(jArr=>jArr?.data?.map(d=>d?.contracts?.map(con=>con?.projects?.map(proj=>{
   if(proj?.pivot?.contract_id===ids.find(id=>id===proj?.pivot?.contract_id))
   {
    names.push(d?.name)
    names.push(proj?.pivot?.project_id)
   }     
}))))
console.log(names)

推荐阅读