我已经声明了一个名为filter的函数,该函数将数组和回调作为参数并将仅偶数传递到新数组中。该代码可以工作,但它还会将不平的数字传递为“ undefined”(我引用的是它,而不是字符串)。我究竟做错了什么?
function filter(array, callback) {
var output = [];
for(var i = 0; i < array.length; i++) {
output.push(callback(array[i]));
}
return output;
}
function isEven(elem) {
if (elem % 2 === 0)
return elem;
}
filter([0,1,2,3,4,5,6,7],isEven); -> [ 0,undefined,2,undefined,4,undefined, 6,undefined]
最佳答案
如果只需要过滤器,则回调应仅返回布尔值:
function filter(array, callback) {
var output = [];
for(var i = 0; i < array.length; i++)
if(callback(array[i]))
output.push(array[i]);
return output;
}
function isEven(elem) {
return elem % 2 === 0;
}
console.log(filter([0,1,2,3,4,5,6,7],isEven));
但是,如果要混合使用map和filter,只需在将其推送到数组之前检查映射值是否与undefined不同。
function mapFilter(array, callback) {
var output = [];
for(var i = 0; i < array.length; i++) {
var value = callback(array[i]);
if(value !== undefined)
output.push(value);
}
return output;
}
function isEven(elem) {
if (elem % 2 === 0)
return elem;
}
console.log(mapFilter([0,1,2,3,4,5,6,7],isEven));