Как прочитать логическое (true / false) всех функций в массиве - PullRequest
2 голосов
/ 18 марта 2019

Мне трудно читать возвращаемое логическое значение ряда функций, которые я добавил в массив.Я хочу прочитать его так, что если любая из функций в массиве читает 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;
    }
}

При отладке я получаю сообщение об ошибке «ложь не является функцией». Есть ли какая-либо работа, которая не изменит эту структуру полностью, если не выдвинет какую-либо идею, которая у вас есть, она все равно будет полезна.Спасибо.

Ответы [ 6 ]

1 голос
/ 18 марта 2019

Вы можете взять ссылки на функции в массиве и вызвать их в обратном вызове для проверки.

function validate() {
    var conditionChecks = [functionA, functionB, functionC, functionD];
    return !conditionChecks.some(fn => fn());
}
1 голос
/ 18 марта 2019

Вы должны передать функцию на 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;
}
0 голосов
/ 18 марта 2019

Как гласит ошибка, некоторые требуют функции для оценки.

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

Используйте эту функцию в некоторых звонках так:

if (result.some(checkIfFalse)) {
        return false;
    } else {
        return true;
    }
0 голосов
/ 18 марта 2019
Array.some()

Ожидает обратный вызов для оценки вашего массива, а не логическое значение.Если вы предоставите ему такую ​​функцию:

function callback(el) {
  return el
}

и передадите ее вместо false, ваш пример будет работать.

0 голосов
/ 18 марта 2019

Проблема в том, что some() ожидает функцию, а не логическое значение. Чтобы исправить это, предоставьте этому методу функцию, которая опрашивает каждый элемент массива и возвращает требуемое значение.

Также обратите внимание, что логику можно сделать гораздо более краткой:

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

function functionA() {
  return true;
}

function functionB() {
  return false;
}

console.log(validate());
0 голосов
/ 18 марта 2019

Аргумент 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

...