如何在JavaScript嵌套对象数组中替换指定键的特定值?
如何用新传入的数据替换深度嵌套对象数组中的对应值
可以通过构建快速查找映射的方式高效实现这个需求,避免多层嵌套循环带来的性能损耗,具体步骤如下:
1. 构建Server数据的映射表
先把传入的serverdata转换为以id为键、x与y对应关系为子映射的结构,后续查找对应值时直接通过键获取,无需重复遍历数组:
const serverMap = new Map(); serverdata.forEach(item => { const xYMap = new Map(); item.data.forEach(d => xYMap.set(d.x, d.y)); serverMap.set(item.id, xYMap); });
2. 遍历原始数据并替换对应值
遍历原始data数组,对每个对象匹配对应的映射表,逐个替换data数组中x匹配项的y值:
const newData = data.map(original => { const xYMap = serverMap.get(original.id); // 无对应id的更新数据时,返回原对象的副本 if (!xYMap) { return {...original, data: [...original.data]}; } // 替换匹配x值的y const updatedData = original.data.map(d => { const newY = xYMap.get(d.x); return newY !== undefined ? {...d, y: newY} : {...d}; }); return {...original, data: updatedData}; });
补充说明
- 该方法是纯函数,不会修改原始的
data和serverdata,所有操作基于副本完成,避免副作用。 - 使用
Map做映射的优势是查找效率高(时间复杂度O(1)),整体算法时间复杂度为O(N+M)(N为原始数据总元素数,M为传入数据总元素数),适合处理大数据量场景。
内容的提问来源于stack exchange,提问作者errorfulldev
相关产品推荐
相关产品推荐

