我偶然发现this great function从数组中删除falsy values:
let other = array.filter(item => item);
但是我不知道这怎么工作。据我了解,在MDN上对Array.prototype.filter()的解释:
filter()方法创建一个新数组,该数组包含所有通过提供的功能实现的测试的元素。
以下代码应该与上面的代码相同(并且确实提供相同的输出):
function foo(item) {
return item;
}
let other = array.filter(foo);
但是foo()
仅返回所有伪造的值,如您在下面的代码片段中所见(如预期)。 如果伪造的值确实通过了提供的功能 ,什么时候进行过滤?
let array = ['foo', undefined, false, 'bar'];
function foo(item) {
return item;
}
array.forEach(item => console.log(foo(item)));
编辑:我的问题存在一些误解:我知道我没有在代码段中使用filter()
。这是因为其唯一目的是表明所有值通过通过foo()
函数,这在当时似乎与以下内容矛盾: [...] all通过提供的功能实现的测试的元素。
看一下Polyfill和它的描述,我现在理解了为什么它能如此工作。谢谢@adiga。我不完全理解 [...]返回的值强制为true ,因为英语不是我的母语,但我想这意味着 [...]返回的含义仅有真实值。
答案 0 :(得分:1)
我不确定我是否正确理解了问题,但是filter
仅返回过滤器回调返回被强制为true
的值(即非虚假的)的值。 / p>
这就是为什么过滤掉虚假值仅需要过滤器函数返回值本身的原因。
(回调函数还可以显式地返回带有!!value
的布尔值,这将执行相同的操作。)