Javascript 比较两个对象数组并根据ID获取对象

Javascript 比较两个对象数组并根据ID获取对象,javascript,arrays,lodash,Javascript,Arrays,Lodash,我有两个对象数组。一个具有id属性和id列表,另一个具有唯一id属性的对象。我想用第一个列表过滤第二个数组中的ID并获取数据 const data1=[{ 名称:‘A’, ID:[1,2,3] }, { 名称:‘B’, ID:[4,5,6] }, { 名称:‘C’, ID:[7,8,9] }] 常数数据2=[{ id:1, 颜色:“红色” }, { id:2, 颜色:“黑色” }, { id:3, 颜色:“蓝色” }, { id:4, 颜色:“黄色” }, { id:5, 颜色:“绿色” },

我有两个对象数组。一个具有id属性和id列表,另一个具有唯一id属性的对象。我想用第一个列表过滤第二个数组中的ID并获取数据

const data1=[{
名称:‘A’,
ID:[1,2,3]
}, {
名称:‘B’,
ID:[4,5,6]
}, {
名称:‘C’,
ID:[7,8,9]
}]
常数数据2=[{
id:1,
颜色:“红色”
}, {
id:2,
颜色:“黑色”
}, {
id:3,
颜色:“蓝色”
}, {
id:4,
颜色:“黄色”
}, {
id:5,
颜色:“绿色”
}, {
id:6,
颜色:“粉色”
},
{
id:7,
颜色:“橙色”
}, {
id:8,
颜色:“白色”
}, {
id:9,
颜色:“青色”
}
]
常量数组对象=(数组)=>
数组.reduce((对象,项)=>{
obj[item.id]=项目
返回obj
}, {})
console.log(arrayToObject(data2))
const newData=data1.map(项=>{
返回{
名称:item.name,
数据:item.ids.map(i=>arrayToObject(data2)[i])
}
})

console.log(newData)
您已经使用了标准方法:

  • 通过
    id
  • 使用
    Array.map()迭代
    data1
  • 获取
    id
    并从字典中获取项目
  • 您可以使用lodash将代码缩短一点:

  • 使用创建字典
  • 从字典中使用
  • const data1=[{“name”:“A”,“ids”:[1,2,3]},{“name”:“B”,“ids”:[4,5,6]},{“name”:“C”,“ids”:[7,8,9]}]
    const data2=[{“id”:1,“color”:“red”},{“id”:2,“color”:“black”},{“id”:3,“color”:“blue”},{“id”:4,“color”:“yellow”},{“id”:5,“color”:“green”},{“id”:6,“color”:“pink”},{“id”:7,“color”:“orange”},{“id”:8,“color”:“white”},{“id”:9,“color”:“teal”}]
    //创建字典
    const dict=u.keyBy(数据2,'id')
    //从字典中获取项目
    const newData=data1.map(({ids,…item})=>({…item,data:uu.at(dict,ids)}))
    console.log(新数据)

    ,因为第二个对象的ID是唯一的。为什么不先将它转换为dictionary,比如
    {1:“red”,2:“black”,3:“blue”}
    然后在第一个对象中循环数组。我看不到任何过滤正在进行。看起来您刚刚将
    ids
    属性替换为
    data
    ,其中包含ids和
    data2
    数组的连接。如果代码正常工作,并且您正在寻找改进建议,则是合适的位置。但请先看。@Frank建议使用映射将这从一个O(n^2)问题转换为O(n)问题,除此之外,您所做的一切都很好。@Frank数据是由一个外部API提供给我的。