我已经声明了一个名为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));

08-25 09:58
查看更多