如何在仅具有“子”数组的一个已标识属性的数组中查找对象的ID

问题描述

我希望使用Java语言中最优化的方法来开发一个函数,以找到仅具有“子”对象代码(在dataArray内部)的“父”对象的id。

示例: getIdParent(“ 240#code”)->返回“ 1”

[
    {
        id: 0,dataArray:[
            {
                id: 182,code: "182#code",name: "Product1"
            },{
                id: 183,code: "183#code",name: "Product2"
            }
        ]
    },{
        id: 1,dataArray:[
            {
                id: 240,code: "240#code",name: "Product2"
            },{
                id: 341,code: "341#code",name: "Product2"
            }
        ]
    }
]

谢谢。

解决方法

您在这里实际上没有太多选择。

我能想到的唯一真正的优化是基于您期望调用此函数的频率。

如果只有一次,则只需要迭代数组,搜索值并尽早返回以防止不必要的迭代。

function getIdParent(childCode) {
  return arr.find(parent =>
    parent.dataArray.some(({ code }) => code === childCode))?.id
}

如果多次,则应建立子code到父对象的索引映射,然后对其进行引用

const arr = [{"id":0,"dataArray":[{"id":182,"code":"182#code","name":"Product1"},{"id":183,"code":"183#code","name":"Product2"}]},{"id":1,"dataArray":[{"id":240,"code":"240#code","name":"Product2"},{"id":341,"code":"341#code","name":"Product2"}]}]

const codeMap = arr.reduceRight((map,parent) => {
  parent.dataArray.forEach(({ code }) => {
    map.set(code,parent)
  })
  return map
},new Map())

function getIdParent(code) {
  return codeMap.get(code)?.id
}

let search = ["240#code","182#code","NotFound"]
search.forEach(code => {
  console.log("Parent ID for",code,"=",getIdParent(code))
})