好的,问题是,给定一个数组,删除所有“假”'。
这是我对所述问题的解决方案(有效):
DispatchQueue.global(qos: .background).async {
///perform your heavy task here(your 10 sec task)
///Upon completion of your task then in following queue
DispatchQueue.main.async {
///change your label text here of completion
}
}
这可行,并通过测试。但是这里给出了解决方案:
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]);
我已经阅读了关于布尔AND滤镜的MDN文章,但仍然不知道这是如何工作的?到底发生了什么?布尔是回调函数吗?如果是这样,那么在后端如何运作?我只是坐在这里挠挠脑袋。
答案 0 :(得分:2)
来自filter:
回调 函数是一个谓词,用于测试数组的每个元素。返回true以保留元素,否则返回
来自Boolean
作为第一个参数传递的值将转换为布尔值
是的。这是回调。它是一个函数(内置于JS语言中),返回true或false,这是filter函数期望传递给它的函数。
答案 1 :(得分:1)
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
答案 2 :(得分:0)
function bouncer(arr) {
return arr.filter(Boolean);
}
上面的代码相当于:
function bouncer(arr) {
return arr.filter(function(arr) {
return Boolean(arr);
});
}
此外,Boolean
在传递falsey参数时返回false
。结果就是过滤掉了。
答案 3 :(得分:0)
arr.filter(Boolean);
与
相同arr.filter(function (x) { return Boolean(x); });
由于布尔构造函数也是一个函数,因此返回true 对于'truthy'论证或对'falsy'论证是假的。
http://www.devign.me/javascript-tip-remove-falsy-items-out-of-an-array