我正在浏览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()方法?
答案 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
转换为等效的布尔值。