如何递归替换对象/数组中的字符串为空串、数字为0?是否有现成工具库?
替换对象/数组中字符串与数字的实现方案
你可以通过两种方式实现需求:自己编写递归函数,或者借助lodash这类工具库简化代码。
一、手动实现递归函数
直接编写递归逻辑遍历对象和数组,针对不同类型的值做替换:
function transformValues(obj) { // 处理对象和数组 if (typeof obj === 'object' && obj !== null) { if (Array.isArray(obj)) { return obj.map(item => transformValues(item)); } else { const result = {}; for (const key in obj) { if (obj.hasOwnProperty(key)) { result[key] = transformValues(obj[key]); } } return result; } } // 替换字符串为空串 else if (typeof obj === 'string') { return ""; } // 替换数字为0 else if (typeof obj === 'number') { return 0; } // 其他类型保持原值 return obj; } // 使用示例 const test = { a: "asdf", b: 2, c: [ { lala: "more strings", d: "saaa" } ] }; const transformedTest = transformValues(test); console.log(transformedTest);
二、使用lodash工具库
lodash的_.cloneDeepWith方法可以深度克隆对象/数组,并允许自定义每个值的转换逻辑,完美适配需求:
const _ = require('lodash'); const test = { a: "asdf", b: 2, c: [ { lala: "more strings", d: "saaa" } ] }; const transformedTest = _.cloneDeepWith(test, (value) => { if (typeof value === 'string') { return ""; } if (typeof value === 'number') { return 0; } // 不返回值时,lodash会继续递归处理嵌套结构 }); console.log(transformedTest);
这个方法不需要手动处理递归遍历,lodash会自动处理对象和数组的嵌套结构,只需在回调里定义字符串和数字的替换规则即可。
内容的提问来源于stack exchange,提问作者Dev01
相关产品推荐
相关产品推荐

