数组forEach不返回布尔值

时间:2018-12-05 06:55:14

标签: javascript function return-value

关于前两个函数为何返回未定义而不是布尔值的问题,有人可以给我一些启示吗?

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 :(得分:1)

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);
}

答案 1 :(得分:1)

如果您选中this的返回值部分,则返回未定义。

enter image description here

Foreach没有任何返回类型,可以使用some。如果必须使用foreach,则可以像在test2

中那样在tempeach中使用temp变量并将其更改

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

答案 2 :(得分:1)

  

说明

当函数没有显式返回时。默认情况下,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;
}

答案 3 :(得分:1)

Array#forEach不会返回特殊值,具体取决于回调的内部返回值。只是迭代所有项目。

Array#some或其对应的Array#every会提前返回,具体取决于回调的返回值。


使用ES6时,如果移交的值是数组的一部分,则可以使用Array#includes,它返回一个布尔值。

const array1 = [1, 2, 3];

console.log(array1.includes(2)); // true

答案 4 :(得分:0)

forEach返回未定义。您要使用的是array.includes

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

const test1Result = test1();


console.log(test1Result);