JavaScript中嵌套对象浮点数字符串转数字的深度处理
解决嵌套对象中字符串格式浮点值转数字的问题
嘿,这个需求很常见,处理嵌套对象里的字符串转数字,用递归遍历就搞定啦!我们要做的就是遍历所有层级的属性,只把那些能转成有效数字的字符串替换成数字类型,像纯文本、布尔值、已经是数字的属性都保持原样。
实现思路
- 遍历对象的每个自有属性
- 如果遇到嵌套对象(注意排除
null,因为typeof null会返回object),就递归调用处理函数深入层级 - 如果属性值是字符串,尝试将其转换为数字:
- 转换成功(结果不是
NaN)就替换成数字类型 - 转换失败(比如"hello"这类非数字字符串)就保留原字符串
- 转换成功(结果不是
- 数字、布尔值等其他类型直接跳过,保持原始状态
代码实现
function convertStringNumbers(obj) { // 遍历对象的可枚举自有属性 for (const key in obj) { if (obj.hasOwnProperty(key)) { const currentValue = obj[key]; // 处理嵌套对象 if (typeof currentValue === 'object' && currentValue !== null) { convertStringNumbers(currentValue); } // 处理字符串类型的值 else if (typeof currentValue === 'string') { const parsedNumber = Number(currentValue); // 只有转换有效(不是NaN)才替换 if (!isNaN(parsedNumber)) { obj[key] = parsedNumber; } } // 数字、布尔值等类型无需处理,直接保留 } } return obj; } // 测试你的示例对象 var myObj = { "value": "text", "params": { "check3": false, "check2obj": { "params": { "value3": 35, "value4": "0.05", "value5": "0.02", "value7": "hello", "local": { "value4": "263.03", "value3": 35, "value2": true, "value1": "hello1" } } } } }; const convertedObj = convertStringNumbers(myObj); console.log(convertedObj);
转换结果
运行代码后,你会得到完全符合预期的对象:
{ "value": "text", "params": { "check3": false, "check2obj": { "params": { "value3": 35, "value4": 0.05, "value5": 0.02, "value7": "hello", "local": { "value4": 263.03, "value3": 35, "value2": true, "value1": "hello1" } } } } }
这个函数能完美适配所有嵌套层级,同时精准保留非数字内容和原始类型,完全满足你的需求~
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

