如何将布尔值作为参数传递?

时间:2017-07-19 12:07:33

标签: javascript

好的,问题是,给定一个数组,删除所有“假”'。

这是我对所述问题的解决方案(有效):

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文章,但仍然不知道这是如何工作的?到底发生了什么?布尔是回调函数吗?如果是这样,那么在后端如何运作?我只是坐在这里挠挠脑袋。

4 个答案:

答案 0 :(得分:2)

来自filter

  

回调   函数是一个谓词,用于测试数组的每个元素。返回true以保留元素,否则返回

来自Boolean

  

作为第一个参数传递的值将转换为布尔值

是的。这是回调。它是一个函数(内置于JS语言中),返回true或false,这是filter函数期望传递给它的函数。

答案 1 :(得分:1)

Boolean对象是布尔值的对象包装器。在调用Boolean时,您实际上正在使用参数调用函数(请参阅代码段) - 正是您在Array.filter()的回调中所需要的。

new Boolean([value])被称为

根据参数,返回的值为truefalse(请参阅代码段。)

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