You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据array2修改array1中productID=1的对象的orderId?

正确实现方案:按规则修改数组对象的orderId

原始数据

let array1 = [
    { id:1, name:'name1', orderId:3, productID:1},
    { id:2, name:'name2', orderId:2, productID:1},
    { id:3, name:'name3', orderId:1, productID:2},
    { id:4, name:'name4', orderId:4, productID:1},
    { id:5, name:'name5', orderId:2, productID:2},
    { id:6, name:'name6', orderId:4, productID:2},
    { id:7, name:'name7', orderId:3, productID:1}
]

let array2 = [4,2,7,1];   // 这是id的数组

需求说明

修改array1中productID等于1的对象的orderId,规则如下:

  • array2中id的顺序对应orderId的数值(索引+1)
  • 示例:array2第一个id为4,对应array1中id=4的对象orderId设为1;第二个id为2,对应对象orderId设为2,以此类推。

原代码问题

原代码嵌套多层循环,逻辑冗余且错误:

  1. 遍历array1对象后又遍历对象属性,完全没必要
  2. 条件判断逻辑混乱,仅打印对象未执行修改操作

正确实现方案

方案1:构建映射表(高效)

先将array2转换为id: orderId的映射对象,再遍历array1修改符合条件的对象,时间复杂度为O(n+m),效率更高。

// 构建id到orderId的映射:索引+1即为对应orderId
const idToOrderMap = array2.reduce((map, id, index) => {
    map[id] = index + 1;
    return map;
}, {});

// 遍历array1修改目标对象
array1.forEach(item => {
    if (item.productID === 1) {
        item.orderId = idToOrderMap[item.id];
    }
});

console.log(array1);

方案2:直接遍历修改(直观)

数据量较小时,可直接遍历array2,找到array1中对应id且productID=1的对象修改orderId:

array2.forEach((id, index) => {
    const targetItem = array1.find(item => item.id === id && item.productID === 1);
    if (targetItem) {
        targetItem.orderId = index + 1;
    }
});

console.log(array1);

预期输出

[
    { id:1, name:'name1', orderId:4, productID:1},
    { id:2, name:'name2', orderId:2, productID:1},
    { id:3, name:'name3', orderId:1, productID:2},
    { id:4, name:'name4', orderId:1, productID:1},
    { id:5, name:'name5', orderId:2, productID:2},
    { id:6, name:'name6', orderId:4, productID:2},
    { id:7, name:'name7', orderId:3, productID:1}
]

内容的提问来源于stack exchange,提问作者Ankit Rajput

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:30:50