如何读取数组中所有函数的布尔值(真/假)

Posted

技术标签:

【中文标题】如何读取数组中所有函数的布尔值(真/假)【英文标题】: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”错误,是否有任何解决方法不会完全改变这个结构,如果没有提出任何想法,它仍然会有所帮助。谢谢。

【问题讨论】:

.some() 想要一个回调函数(false 不是):developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 【参考方案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;
    

【讨论】:

以上是关于如何读取数组中所有函数的布尔值(真/假)的主要内容,如果未能解决你的问题,请参考以下文章

(14)awk布尔值比较和逻辑运算

Php fetch 返回字符串而不是布尔“真/假”值

在c中将布尔结果打印为“假”或“真”的最佳方法?

在c中将布尔结果打印为“假”或“真”的最佳方法?

在嵌套函数中返回布尔值

检查数组中的所有值是不是为真,然后返回一个真布尔语句(javascript)[重复]