function convertStringsToNumbers(obj) {
for (let key in obj) {
if (typeof obj[key] === 'string' && !isNaN(obj[key])) {
obj[key] = Number(obj[key]);
} else if (typeof obj[key] === 'object') {
convertStringsToNumbers(obj[key]);
} else if (Array.isArray(obj[key])) {
obj[key] = obj[key].map(item => {
if (typeof item === 'string' && !isNaN(item)) {
return Number(item);
}
return item;
});
}
}
return obj;
}
// 示例使用
const obj = {
a: '123',
b: '456.78',
c: {
d: '90',
e: 'abc', // 这个字符串不会被转换,因为它不是一个有效的数字
f: [
'12',
'34.5',
'abc' // 这个字符串不会被转换,因为它不是一个有效的数字
]
}
};
const convertedObj = convertStringsToNumbers(obj);
console.log(convertedObj);
在这个函数中,我们检查每个属性的值,如果是字符串类型且为有效数字,则转换为数字类型。如果属性值是数组,则对数组中的每个元素进行同样的转换。如果属性值是对象,则递归调用该函数。其他非字符串或者不是有效数字字符串的属性将保持不变。