递归map
时间: 2023-06-21 15:24:18 浏览: 149
递归map指的是对一个嵌套的数据结构(比如json)进行递归遍历,并对其中的每一个元素都执行某个操作(比如修改、替换、删除等等)。在JavaScript中,可以使用递归函数和map方法来实现递归map操作,示例代码如下:
```javascript
function recursiveMap(obj, callback) {
if (Array.isArray(obj)) {
return obj.map(item => recursiveMap(item, callback));
} else if (typeof obj === 'object' && obj !== null) {
return Object.keys(obj).reduce((acc, key) => {
acc[key] = recursiveMap(obj[key], callback);
return acc;
}, {});
} else {
return callback(obj);
}
}
// 示例:将所有字符串都转换为大写
const data = {
name: 'Alice',
age: 20,
address: {
city: 'Beijing',
street: 'Xinjiekou'
},
hobbies: [
'reading',
'traveling'
]
};
const upperCaseData = recursiveMap(data, item => typeof item === 'string' ? item.toUpperCase() : item);
console.log(upperCaseData);
// 输出:{
// "name": "ALICE",
// "age": 20,
// "address": {
// "city": "BEIJING",
// "street": "XINJIEKOU"
// },
// "hobbies": [
// "READING",
// "TRAVELING"
// ]
// }
```
上述代码中,recursiveMap函数接受两个参数:待遍历的数据结构obj和对每个元素执行的回调函数callback。在函数内部,首先判断obj是否为数组,如果是,则对每个元素递归调用recursiveMap函数,并使用map方法将结果组成一个新的数组返回;如果不是数组但是是对象,则对每个键值对递归调用recursiveMap函数,并使用reduce方法将结果组成一个新的对象返回;如果obj既不是数组也不是对象,则直接执行callback函数并返回结果。最终,recursiveMap函数将返回一个新的数据结构,其中每个元素都已经被callback函数处理过了。
阅读全文