Массив forEach не возвращает логическое значение - PullRequest
0 голосов
/ 05 декабря 2018

Может ли кто-нибудь дать мне некоторое представление о том, почему первые 2 функции возвращают undefined вместо логического значения?

https://jsfiddle.net/wjf2gr9d/

const array1 = [1, 2, 3];

const test1Result = test1();
const test2Result = test2();
const test3Result = test3();

console.log(test1Result);
console.log(test2Result);
console.log(test3Result);


function test1() {
    return array1.forEach(x => 2 === x);
}

function test2() {
    const found = array1.forEach((x, index) => {
        if (2 === x) {
            return true;
        }
        return false;
    });

    return found;
}

function test3() {
    const maybeTeam = array1.find(x => 2 == x);

    return (maybeTeam) ? true : false;
}

Ответы [ 5 ]

0 голосов
/ 05 декабря 2018

Array#forEach не возвращает специального значения, в зависимости от внутреннего возвращаемого значения обратного вызова.Он просто повторяет все элементы.

Array#some или его аналог Array#every возвращается рано, в зависимости от возвращаемого значения обратного вызова.


Пока вы используете ES6, вы можете взять Array#includes, который возвращает логическое значение, если передаваемые значения являются частью массива.

const array1 = [1, 2, 3];

console.log(array1.includes(2)); // true
0 голосов
/ 05 декабря 2018

Объяснение

Когда функция не имеет явного возврата в нее.по умолчанию функция JavaScript возвращает undefined для этой функции.

Для справки просто посмотрите на пример ниже.Здесь внутреннее console.log('hello') печатает hello, но поскольку возвращаемое неявное возвращаемое значение из внутреннего console.log() равно undefined, то внешнее console.log() печатает undefined.

console.log(console.log('Hello'))

Хорошо, я предлагаю вам посмотреть изменения. Вы поймете, почему это так.

const array1 = [1, 2, 3];
test1();
test2();
console.log(test3());

function test1() {
    let a = array1.forEach(x => 2 === x);
    console.log(a);
    return a;
}

function test2() {
    const found = array1.forEach((x, index) => {
        if (2 === x) {
            return true;
        }
        return false;
    });

    console.log(found);
    return found;
}

function test3() {
    const maybeTeam = array1.find(x => 2 == x);

    return (maybeTeam) ? true : false;
}
0 голосов
/ 05 декабря 2018

для каждого возврата не определено.то, что вы хотите использовать в вашем случае, это array.includes

const array1 = [1, 2, 3];
function test1() {
    return array1.includes(2);
}

const test1Result = test1();


console.log(test1Result);
0 голосов
/ 05 декабря 2018

Если вы отметите этот раздел проверки возвращаемого значения, он вернет неопределенное значение.

enter image description here

Foreach не имеет типов возврата, Вы можете использовать некоторые .Если вы должны использовать foreach, вы можете взять переменную temp и изменить ее внутри foreach, как я делал в test2

const array1 = [1, 2, 3];

const test1Result = test1();
const test2Result = test2();
const test3Result = test3();

console.log(test1Result);
console.log(test2Result);
console.log(test3Result);


function test1() {
    return array1.some(x => 2 === x);
}

function test2() {
    var found = false;
    array1.forEach((x, index) => {
        if (2 === x) {
            found = true;
        }
       
    });

    return found;
}

function test3() {
    const maybeTeam = array1.find(x => 2 == x);

    return (maybeTeam) ? true : false;
}
Кредиты: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
0 голосов
/ 05 декабря 2018

forEach всегда возвращает undefined;return <arr>.forEach будет всегда , в результате чего будет возвращено undefined, независимо от логики в forEach.Если вы хотите проверить, проходит ли какой-либо элемент в массиве определенный тест, вы должны использовать .some вместо:

const array1 = [1, 2, 3];

const test1Result = test1();

console.log(test1Result);
function test1() {
    return array1.some(x => 2 === x);
}
...