在作为函数参数传递的数组上使用array.filter()方法

时间:2017-02-24 17:13:33

标签: javascript arrays

我正在浏览FreeCodeCamp" Falsy Bouncer"挑战。我必须从数组中删除所有的虚假值。我已经知道最简单的解决方案是过滤布尔值,但我想知道是否有可能以这种方式解决问题。

我在不同的网站上查找了arr.filter()方法,但在这些示例中,带有数组的变量出现在函数之前。在我的例子中,我必须操作的数组作为函数的参数。所以我真的不明白我在哪里放这一行:var result = arr.filter(bouncer)。如果它超出了函数 - 那么它返回arr is not defined。如果它进入函数,则返回 - arr.filter is not a function

这是我的代码:

 function bouncer(arr) {
    // Where do I put this line?   
    var result = arr.filter(bouncer);
    return arr !== false, null, 0, NaN, undefined,"";
  }

  bouncer([7, "ate", "", false, 9]);

那么如果将数组作为函数的参数给出,那么如何使用array.filter()方法?

2 个答案:

答案 0 :(得分:1)

您使用的方法错误,并且您无法检查由逗号分隔的多个内容。做你想做的事的正确方法是



function bouncer(arr) {
    return arr.filter(v => !!v);
}

console.log(bouncer([7, "ate", "", false, 9]))




答案 1 :(得分:1)

如果您希望bouncer成为用于返回已过滤数组的函数,请使用此函数:



function bouncer(arr) {
  return arr.filter(e => !!e);
}

var result = bouncer([7, "ate", "", false, 9, NaN]);
console.log(result);




如果您希望bouncer成为要传递给filter的回调,请使用以下内容:



function bouncer(elem) {
  return !!elem;
}

var result = [7, "ate", "", false, 9, NaN].filter(bouncer);
console.log(result);




注意: !!someVariable会隐式地将someVariable转换为等效的布尔值。