【问题标题】:How to read boolean (true/false) of all functions in an array如何读取数组中所有函数的布尔值(真/假)
【发布时间】:2019-08-08 18:53:26
【问题描述】:

我很难读取添加到数组中的多个函数的返回布尔值。我想读取它,这样如果数组中的任何函数读取为 false,它就会将 false 返回给父函数。

这是我正在运行的代码示例:

function validate(){
    var function1 = functionA();
    var function2 = functionB();
    var function3 = functionC();
    var function4 = functionD();
    var result = new Array;
    result.push(function1);
    result.push(function2);
    result.push(function3);
    result.push(function4);
    if (result.some(false)) {
        return false;
    } else {
        return true;
    }
}

我在调试时收到“false is not a function”错误,是否有任何解决方法不会完全改变这个结构,如果没有提出任何想法,它仍然会有所帮助。谢谢。

【问题讨论】:

标签: javascript jquery arrays function boolean


【解决方案1】:

你应该将一个函数传递给some()

function validate(){
    var function1 = functionA();
    var function2 = functionB();
    var function3 = functionC();
    var function4 = functionD();
    var result = new Array;
    result.push(function1);
    result.push(function2);
    result.push(function3);
    result.push(function4);
    if (result.some(f => !f)) {
        return false;
    } else {
        return true;
    }
}
console.log(validate());
function functionA(){
  return true;
}
function functionB(){
  return false;
}
function functionC(){
  return true;
}
function functionD(){
  return true;
}

【讨论】:

    【解决方案2】:

    您可以将函数引用放在一个数组中,并在回调中调用它们进行检查。

    function validate() {
        var conditionChecks = [functionA, functionB, functionC, functionD];
        return !conditionChecks.some(fn => fn());
    }
    

    【讨论】:

    • 感谢您的分享非常有见地,但是按照您的方法,我必须为 fn() 创建另一个函数,因为它不是我的代码中的函数,我避免这样做
    • fn() 是对函数 A/B/C 的引用,因此不需要额外的代码。这与我的回答类似,区别仅在于您调用函数的点。
    【解决方案3】:

    问题是因为some() 需要一个函数,而不是布尔值。要解决此问题,请为该方法提供一个函数,该函数会询问数组的每个元素并返回您所需的值。

    还要注意,逻辑可以更简洁:

    function validate() {
      var result = [functionA(), functionB()];
      return !result.some(v => !v);
    }
    
    function functionA() {
      return true;
    }
    
    function functionB() {
      return false;
    }
    
    console.log(validate());

    【讨论】:

      【解决方案4】:

      Array.some() 参数应该是一个函数。

      var array = [1, 2, 3, 4, 5];
      
      var even = function(element) {
        // checks whether an element is even
        return element % 2 === 0;
      };
      
      console.log(array.some(even));
      // expected output: true
      

      查看文档: https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Array/some

      【讨论】:

      • 提供链接值得一票,但代码只是从链接中复制的,这有点可悲。也许你可以设计你的代码来匹配这个问题?
      • OP的错误很简单,没有必要解决他的具体问题。提供片段只是为了防止链接内容更改或被删除。
      【解决方案5】:
      Array.some()
      

      期望回调来评估您的数组,而不是布尔值。 如果你给它提供这样的功能:

      function callback(el) {
        return el
      }
      

      并传递它而不是 false,您的示例将起作用。

      【讨论】:

        【解决方案6】:

        由于错误状态,一些需要一个函数来评估。

        function checkIfFalse(valToCheck){
            return valToCheck === false;
        }
        

        在你的一些调用中使用这个函数,如下所示:

        if (result.some(checkIfFalse)) {
                return false;
            } else {
                return true;
            }
        

        【讨论】:

          猜你喜欢
          • 2020-12-29
          • 2020-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-13
          相关资源
          最近更新 更多