MST

星途 面试题库

面试题:JavaScript显式类型转换在复杂数据结构中的最佳实践

假设有一个复杂的数据结构,例如包含嵌套数组和对象的JSON数据,需要将其中特定属性值进行显式类型转换以满足业务需求(比如将所有数值类型的字符串转换为实际数字)。请描述你的解题思路,并给出实现代码。
26.8万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

解题思路

  1. 遍历整个复杂数据结构。因为数据结构可能包含嵌套数组和对象,所以使用递归方法较为合适。
  2. 对于对象,遍历其所有属性。如果属性值是对象或数组,递归处理该值;如果属性值是字符串且可以转换为数字(通过isNaN判断),则将其转换为数字。
  3. 对于数组,遍历数组的每个元素。如果元素是对象或数组,递归处理该元素;如果元素是字符串且可以转换为数字,同样进行转换。

实现代码(以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)