面试题答案
一键面试解题思路
- 遍历整个复杂数据结构。因为数据结构可能包含嵌套数组和对象,所以使用递归方法较为合适。
- 对于对象,遍历其所有属性。如果属性值是对象或数组,递归处理该值;如果属性值是字符串且可以转换为数字(通过
isNaN
判断),则将其转换为数字。 - 对于数组,遍历数组的每个元素。如果元素是对象或数组,递归处理该元素;如果元素是字符串且可以转换为数字,同样进行转换。
实现代码(以JavaScript为例)
function transformData(data) {
if (Array.isArray(data)) {
return data.map(item => transformData(item));
} else if (typeof data === 'object' && data!== null) {
const newData = {};
for (const key in data) {
if (data.hasOwnProperty(key)) {
newData[key] = transformData(data[key]);
}
}
return newData;
} else if (typeof data ==='string' &&!isNaN(parseFloat(data)) && isFinite(data)) {
return parseFloat(data);
}
return data;
}
// 使用示例 const jsonData = { "name": "example", "age": "30", "scores": ["85", "90"], "details": { "height": "175" } }; const transformedData = transformData(jsonData); console.log(transformedData);
### 实现代码(以Python为例)
```python
def transform_data(data):
if isinstance(data, list):
return [transform_data(item) for item in data]
elif isinstance(data, dict):
new_data = {}
for key, value in data.items():
new_data[key] = transform_data(value)
return new_data
elif isinstance(data, str) and data.isdigit():
return int(data)
elif isinstance(data, str) and data.replace('.', '', 1).isdigit():
return float(data)
return data
json_data = {
"name": "example",
"age": "30",
"scores": ["85", "90"],
"details": {
"height": "175"
}
}
transformed_data = transform_data(json_data)
print(transformed_data)