2017-02-24 53 views
-1

我正在通过FreeCodeCamp“Falsy Bouncer”挑战。我必须从数组中删除所有的falsy值。我已经知道最简单的解决方案是过滤布尔值,但我想知道是否有可能通过这种方式解决问题。在作为函数参数传递的数组上使用array.filter()方法

我在不同的网站上查找了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()如果阵列被给定为一个函数的自变量使用的方法?

+1

参数*只是变量。 'var result = arr.filter(bouncer);'是接近的,但你不应该通过'bouncer'函数来过滤,你正在创建一个永远不会完成的递归循环。 – Brennan

+0

你想保持''吃了吗? '在结果数组中,还是只想保留数字? –

+0

是的,我想保持“吃”。我只需要过滤掉falsy元素:false,null,0,“”,undefined和NaN。 –

回答

1

您使用的方法错误,而且您无法检查以逗号分隔的多个事物。

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

 
var result = bouncer([7, "ate", "", false, 9, NaN]); 
 
console.log(result);
:做你想要将

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

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

+0

这不正确@Andreas,isNaN检查不会被覆盖,“吃”会留在阵列中。但我同意你可以将它简化为我在答案中编辑的内容 – baao

+1

为什么要删除“吃”? “比较”部分中的值都是[falsy值](https://developer.mozilla.org/de/docs/Glossary/Falsy)。除非'NaN'部分没有进一步的定义,否则我没有看到'isNaN()'检查的原因,因此可以使用伊布林解决方案。 – Andreas

+0

@Andreas在阅读挑战的描述之后,我承认你是对的。 – baao

1

如果你想bouncer是您用来返回过滤阵列功能,然后用这个东西的正确方法

如果你想要bouncer是要传递给filter回调,然后使用此:

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

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

注:!!someVariable将隐式转换someVariable成等效的布尔值。

+0

你的过滤器允许NaN的 – baao

+0

@baao不,它不! –

+0

单击运行代码片段,查看结果数组中的“吃”。那只是NaN而已? – baao