这是我正在练习的映射函数;
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/