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

实现类似JSON.stringify的深替换函数(无需序列化解析)

实现类似JSON.stringify的深替换函数(无需序列化/外部库)

可以通过手动递归遍历对象的方式实现,核心是遍历每个键值对,遇到嵌套对象就递归处理,同时支持自定义替换逻辑,和JSON.stringify的replacer行为对齐,且不会修改原对象。

实现代码

function deepReplace(obj, replacer) {
  // 处理基本类型、null等非对象值
  if (typeof obj !== 'object' || obj === null) {
    return replacer('', obj);
  }

  // 根据原类型创建新的容器(数组/对象)
  const result = Array.isArray(obj) ? [] : {};

  // 遍历所有自有属性
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      // 递归处理子对象,再应用替换逻辑
      const processedValue = deepReplace(obj[key], replacer);
      result[key] = replacer(key, processedValue);
    }
  }

  return result;
}

使用示例

用你提供的测试对象和替换逻辑:

const data = { a: 'a', b: 'b', c: { hello: 'hello'} };

const replacedData = deepReplace(data, (k, v) => {
  if (k === 'hello') {
    return 'hello world!';
  }
  return v;
});

console.log(replacedData);
// 输出:{ a: 'a', b: 'b', c: { hello: 'hello world!' } }

关键说明

  • 函数返回全新对象,原对象保持不变,避免副作用
  • 同时支持对象和数组的深遍历替换
  • 仅遍历对象的自有属性,不会处理原型链上的属性
  • 替换逻辑完全由传入的replacer函数控制,和JSON.stringify的replacer用法一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:53:29