如何将另一数组指定字段按匹配规则添加到当前数组对象中
问题修正:将arr1匹配的_id添加为arr2的orderId字段
原代码存在的问题
- 未定义变量
productIds,应使用arr1替代 - 错误地给arr2对象添加
productId字段,实际需添加的是orderId,且值应为arr1中匹配对象的_id而非productId - 直接通过索引
i关联arr1和arr2元素,若数组顺序不一致会导致匹配错误,逻辑不健壮
修正后的解决方案
先将arr1转换为以productId为键、_id为值的映射表,实现高效查找,再遍历arr2添加orderId字段:
// 构建productId到orderId的映射 const productToOrderMap = new Map(); arr1.forEach(item => { productToOrderMap.set(item.productId, item._id); }); // 遍历arr2添加orderId字段 arr2.forEach(item => { item.orderId = productToOrderMap.get(item._id); }); console.log(arr2);
代码说明
- 映射表构建:用
Map存储arr1中每个productId对应的_id(即目标orderId),查找时间复杂度为O(1),比每次遍历arr1查找更高效 - 遍历赋值:对arr2中的每个元素,用其
_id作为键从映射表中取出对应的orderId,赋值给新的orderId字段 - 健壮性:无论arr1和arr2的元素顺序是否一致,都能正确匹配对应关系
简洁链式写法(返回新数组)
若需保留原arr2不变,可使用数组方法生成新数组:
const result = arr2.map(item => { const matchedOrder = arr1.find(order => order.productId === item._id); return { ...item, orderId: matchedOrder?._id }; }); console.log(result);
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

