好的,问题是,给定一个数组,删除所有'falsey'的元素。
这是我对上述问题的解决方案(有效(:
function bouncer(arr) {
var trueArr = [];
for(i=0; i<arr.length; i++){
if (arr[i]){
trueArr.push(arr[i]);
}
}
return(trueArr);
}
bouncer([7, "ate", "", false, 9]);
这有效,并通过测试。但这是给出的解决方案:
function bouncer(arr) {
return arr.filter(Boolean);
}
我已经阅读了关于布尔和过滤器的 MDN 文章,但仍然不明白这是如何工作的?这里到底发生了什么?布尔值是回调函数吗?如果是这样,后端是如何工作的?我只是坐在这里挠头。
从过滤器:
回调 函数是一个谓词,用于测试数组的每个元素。返回 true 以保留元素,否则返回 false
从布尔值
作为第一个参数传递的值将转换为布尔值
所以是的。这是回调。它是一个返回 true 或 false 的函数(内置于 JS 语言中(,这是过滤器函数期望传递给它的函数执行的操作。
Boolean
对象是布尔值的对象包装器。调用Boolean
时,您实际上是在调用带有参数的函数(请参阅代码片段( - 这正是您在回调中需要的Array.filter()
.
new Boolean([value])
被称为
根据参数的不同,返回的值将为true
或false
(请参阅代码片段(。
console.log(Boolean); //Constructor
console.log(Boolean(0)); //Falsy value
console.log(Boolean("foo")); //Truthy value
function bouncer(arr) {
return arr.filter(Boolean);
}
上面的代码等效于:
function bouncer(arr) {
return arr.filter(function(arr) {
return Boolean(arr);
});
}
此外,Boolean
在传递假参数时返回false
。结果,这些被过滤掉了。
arr.filter(Boolean);
与
arr.filter(function (x) { return Boolean(x); });
由于布尔构造函数也是一个函数,因此它返回 true 对于"真实"论点或对于"虚假"论点是假的。
http://www.devign.me/javascript-tip-remove-falsy-items-out-of-an-array