用js中map写一个递归函数
时间: 2024-05-15 15:18:39 浏览: 143
好的,这是一个使用JavaScript中map方法实现递归的示例函数:
```javascript
function recursiveMap(arr, callback) {
return arr.map(function(item) {
if (Array.isArray(item)) {
return recursiveMap(item, callback);
} else {
return callback(item);
}
});
}
```
这个函数接收一个数组和一个回调函数作为参数,它会对数组进行遍历,如果遍历到的元素是数组,就会递归调用自身,并将这个数组作为参数传递给递归函数,然后将递归函数的返回值作为当前元素的新值。如果遍历到的元素不是数组,就会将这个元素传递给回调函数,并将回调函数的返回值作为当前元素的新值。最后,这个函数会返回一个新的数组,其中的元素是经过回调函数处理后的原数组中的元素。
相关问题
递归中使用map()js
在 JavaScript 中,可以使用递归函数和 Array.prototype.map() 来处理嵌套的数组或对象。以下是一个使用 map() 和递归函数的示例:
```javascript
const nestedArray = [1, [2, [3, [4]], 5]];
function flatten(arr) {
return arr.reduce(function(acc, curr) {
if (Array.isArray(curr)) {
return acc.concat(flatten(curr));
} else {
return acc.concat(curr);
}
}, []);
}
const flattenedArray = flatten(nestedArray);
console.log(flattenedArray); // [1, 2, 3, 4, 5]
```
在上面的示例中,`flatten()` 函数接收一个嵌套数组,并使用 reduce() 遍历每个元素。如果当前元素是一个数组,它将递归调用 `flatten()` 函数来平铺嵌套数组。否则,它将当前元素添加到累加器数组中。
请注意,`Array.isArray()` 函数用于检查当前元素是否是数组。如果您需要处理嵌套对象而不是嵌套数组,则可以使用 `typeof` 操作符来检查当前元素是否是对象。
递归map
递归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函数处理过了。
阅读全文