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

如何在TypeScript对象中替换指定路径的嵌套对象

精准修改TypeScript对象中指定路径的属性

需求说明

现有如下TypeScript对象:

const originalObj = {
   requirements: {
     general_info: {
       aircraft: {
         payload: { '@_unit': 'kg' },
         autopilot_ratio: '',
       },
       power: {
         number_of_engines: '',
       },
       geometrical: {
         payload: { '@_unit': 'kg' },
         design_approach: { target: '' },
       },
     },
   },
};

需要将requirements.general_info.aircraft.payload路径下的对象修改为{ '@_unit': 'hg', '#text': 3000},最终得到目标对象:

const targetObj = {
   requirements: {
     general_info: {
       aircraft: {
         payload: { '@_unit': 'hg', '#text': 3000},
         autopilot_ratio: '',
       },
       power: {
         number_of_engines: '',
       },
       geometrical: {
         payload: { '@_unit': 'kg' },
         design_approach: { target: '' },
       },
     },
   },
};

之前编写的递归函数会修改所有同名的payload键,还存在嵌套对象重复插入的问题,需要实现通过完整路径精准定位并修改的方法。

解决方案

通过拆分路径字符串,逐层遍历对象找到目标节点后再修改,避免无差别遍历所有键。以下是实现函数:

const updateObjectByPath = (obj: any, path: string, newProps: any): void => {
  // 将路径拆分为单个键的数组
  const keys = path.split('.');
  // 遍历到目标节点的父级对象
  const targetParent = keys.slice(0, -1).reduce((current, key) => {
    return current[key];
  }, obj);
  // 获取目标节点的键名
  const targetKey = keys[keys.length - 1];
  // 合并原有属性与新属性(若需完全替换,直接赋值targetParent[targetKey] = newProps即可)
  targetParent[targetKey] = { ...targetParent[targetKey], ...newProps };
};

// 使用示例
updateObjectByPath(originalObj, 'requirements.general_info.aircraft.payload', { '@_unit': 'hg', '#text': 3000 });
console.dir(originalObj, { depth: null });

函数说明

  • path参数传入以.分隔的完整属性路径,精准定位目标节点
  • newProps传入需要修改或新增的属性,函数默认合并原有属性与新属性,可根据需求改为直接替换
  • 仅修改指定路径下的对象,不会影响其他同名键的节点

注意事项

  • 需确保传入的路径有效,否则会触发Cannot read properties of undefined错误,可根据需求添加路径有效性校验逻辑
  • 若不想修改原对象,可先对原对象进行深拷贝(如使用structuredClone),再对拷贝后的对象执行修改操作

内容的提问来源于stack exchange,提问作者3corex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:25:18