实现类似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
相关产品推荐
相关产品推荐

