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

如何实现支持路径自动创建的JSON对象setPath赋值函数?

实现setPath函数:动态设置JSON对象的嵌套路径值

完整实现代码

function setPath(payload, path, value) {
  // 深拷贝原始对象,避免修改原数据
  const result = JSON.parse(JSON.stringify(payload));
  // 解析路径,提取节点和数组下标
  const pathSegments = [];
  const regex = /([^\.\[\]]+)(?:\[(\d+)\])?/g;
  let match;
  while ((match = regex.exec(path)) !== null) {
    const key = match[1];
    const index = match[2];
    pathSegments.push(key);
    if (index !== undefined) {
      pathSegments.push(Number(index));
    }
  }

  let current = result;
  // 遍历路径片段,创建嵌套结构
  for (let i = 0; i < pathSegments.length - 1; i++) {
    const segment = pathSegments[i];
    const nextSegment = pathSegments[i + 1];
    // 如果当前节点不存在,根据下一个节点类型初始化
    if (!(segment in current)) {
      current[segment] = typeof nextSegment === 'number' ? [] : {};
    }
    current = current[segment];
    // 处理当前节点是数组但下标超出长度的情况
    if (Array.isArray(current) && typeof nextSegment === 'number' && current.length <= nextSegment) {
      while (current.length <= nextSegment) {
        current.push(undefined);
      }
    }
  }

  // 设置最终值
  const lastSegment = pathSegments[pathSegments.length - 1];
  current[lastSegment] = value;

  return result;
}

代码说明

  1. 路径解析:用正则表达式拆分路径字符串,把"foo.bar[0]"这类格式转换成["foo", "bar", 0]的可遍历片段,自动区分对象键(字符串)和数组下标(数字)。
  2. 深拷贝隔离:通过JSON.parse(JSON.stringify())复制原始对象,保证原数据不受修改;如果需要直接修改原对象,可去掉这一步直接操作payload。
  3. 嵌套结构自动创建:遍历路径片段时,逐个检查节点是否存在,不存在则根据下一个节点的类型初始化(数字下标对应数组,否则对应对象);如果遇到数组下标超出当前数组长度的情况,会自动填充空值到指定下标位置,确保赋值有效。
  4. 最终赋值:遍历到最后一个路径片段时,给对应位置设置目标值。

测试场景

场景1:空对象初始化

const obj = {};
const newObj = setPath(obj, "foo.bar[0]", "wut");
console.log(newObj);
// 输出:{ foo: { bar: [ 'wut' ] } }

场景2:已有部分嵌套结构

const obj = {
  foo: {
    bar: []
  }
};
const newObj = setPath(obj, "foo.bar[0]", "wut");
console.log(newObj);
// 输出:{ foo: { bar: [ 'wut' ] } }

补充说明

  • 函数支持连续数组下标的路径,比如"foo[0][1].name"这类格式也能正确处理。
  • 若需要处理函数、Symbol等JSON.parse无法兼容的特殊类型,可替换为递归实现的深拷贝函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:17:48