如何基于array1直接修改array2的对象id值,而非生成新数组?
直接修改原array2的最优实现方案
原始数据与需求
给定两个JavaScript数组:
const array1 = [ { id: "40", alias: "Number", name: "Number", }, { id: "41", alias: "Salary", name: "Salary", }, ]; const array2 = [ { id: "Sum__Salary__U3VtKFVTJTIwRW1wbG95ZWUuU2FsYXJ5KQ__", name: "Salary", }, { id: "40", name: "Number" }, ];
需求:直接修改原array2,将其中name为"Salary"的对象的id从"Sum__Salary__U3VtKFVTJTIwRW1wbG95ZWUuU2FsYXJ5KQ__"修改为"41"。现有实现会生成新数组,不符合需求。
最优实现方案
方案1:精准修改指定元素
如果仅需修改name为"Salary"的元素,可直接定位目标并修改:
// 从array1中获取Salary对应的id const salaryId = array1.find(item => item.alias === 'Salary').id; // 找到array2中目标元素并更新id const targetItem = array2.find(item => item.name === 'Salary'); if (targetItem) { targetItem.id = salaryId; } console.log(array2); // 输出结果: // [ // { id: "41", name: "Salary" }, // { id: "40", name: "Number" } // ]
方案2:通用批量修改(适配多元素场景)
如果需要对array2中所有name匹配array1alias的元素统一更新id,用Map构建映射表可大幅提升查找效率:
// 将array1转换为以alias为键、id为值的映射表,O(n)时间构建,后续查找仅需O(1) const aliasIdMap = new Map(array1.map(item => [item.alias, item.id])); // 遍历array2直接修改原元素 array2.forEach(item => { const matchedId = aliasIdMap.get(item.name); // 仅当找到匹配id时才执行修改 if (matchedId) { item.id = matchedId; } }); console.log(array2); // 输出结果同上
方案优势
- 直接操作原array2,完全满足"不生成新数组"的需求
- 方案2使用
Map优化查找逻辑,数组元素越多,性能优势越明显 - 代码逻辑简洁清晰,可读性强,后续维护成本低
内容的提问来源于stack exchange,提问作者Sameer
相关产品推荐
相关产品推荐

