Javascript 比较两个对象数组并根据ID获取对象
我有两个对象数组。一个具有id属性和id列表,另一个具有唯一id属性的对象。我想用第一个列表过滤第二个数组中的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, 颜色:“绿色” },
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
并从字典中获取项目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提供给我的。