使用Map与Filter根据ID将对象填充至ID数组
如何用Map和Filter根据ID数组匹配并生成对应对象数组?
嘿,我来帮你搞定这个需求!你想要把orderArray里的每个ID替换成objectsArray中对应的对象,用map和filter组合完全可以实现,下面是具体的实现思路和代码:
核心思路
- 用
map遍历ID数组:map方法会遍历orderArray中的每一个ID,把每个ID转换成对应的对象,正好符合我们"填充"的需求。 - 用
filter匹配对应对象:在map的回调函数里,用filter从objectsArray中筛选出_id和当前ID完全匹配的对象。因为filter返回的是数组,我们直接取第一个元素(默认每个ID对应唯一的对象)。
完整代码示例
我先修正了你提供的objectsArray里的语法错误(补全了未闭合的属性),然后给出实现代码:
var orderArray = ["5ace454a2b22e17597d0e694", "5acde7c0f7d2520e3b205971", "5ad2086bf05ad342dc723ea1"]; var objectsArray = [ { _id: "5acde7c0f7d2520e3b205971", name: 'Dinner', restaurant: "5a68d8ea17d9e4308e6400c3", created: "2018-04-11T10:47:28.957Z", status: true, products: [ [Object] ] }, { _id: "5ace454a2b22e17597d0e694", name: 'Test', restaurant: "5a68d8ea17d9e4308e6400c3", image: { _id: "5ad23ed177b..." } } ]; // 生成填充后的对象数组 var filledOrderArray = orderArray.map(id => { // 筛选匹配_id的对象,取第一个结果 return objectsArray.filter(obj => obj._id === id)[0]; }); console.log(filledOrderArray);
额外优化建议
- 类型匹配注意:如果你的
objectsArray里的_id是MongoDB的ObjectId类型(不是字符串),记得先转成字符串再比较,比如:obj._id.toString() === id。 - 处理不存在的ID:如果
orderArray里的某个ID在objectsArray中找不到对应对象,结果里会出现undefined。你可以根据需求处理这种情况:- 过滤掉不存在的对象:
var filledOrderArray = orderArray.map(id => { return objectsArray.filter(obj => obj._id === id)[0]; }).filter(item => item !== undefined); - 给不存在的ID设置默认对象:
var filledOrderArray = orderArray.map(id => { return objectsArray.filter(obj => obj._id === id)[0] || { _id: id, name: '未找到对应对象' }; });
- 过滤掉不存在的对象:
内容的提问来源于stack exchange,提问作者Timothy
相关产品推荐
相关产品推荐

