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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:20:12