这是我正在使用的映射功能;
var list = [1,2,3,4,5];
function isOdd(v) {
return v % 2 == 1;
}
function exclude(arr, fn) {
var myList = [];
for (var i = 0; i < arr.length; i++) {
if (fn(arr[i])) {
myList.push(arr[i]);
}
};
return myList;
}
我想用递归解决方案代替for循环,但是由于我在第2行的每个函数调用中都启动了一个新列表,因此它无法产生适当的数组。如何使用递归解决呢?这是我最近得到的;
function exclude(arr, fn) {
let myList = [];
if (arr.length = 1) {
if (fn(arr[0])) {
return myList.push(arr[0]);
}
} else {
return myList.push(exclude(arr.slice(1), fn));
}
}
console.log(exclude(list, isOdd));
最佳答案
试试这个解决方案。我对您的实现进行了一些更改。
function exclude(arr, fn, output) {
output || (output = []);
if(!arr.length) {
return output;
}
if (fn(arr[0])) {
output.push(arr[0]);
}
return exclude(arr.slice(1), fn, output);
}
console.log(exclude([1,2,3,4,5,6,7,8,9], function(i) { return i % 2; }));
关于javascript - 如何在JavaScript中递归表示.filter()函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41608802/