微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在仅具有“子”数组的一个已标识属性的数组中查找对象的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))
})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。