簡體   English   中英

數組forEach不返回布爾值

[英]Array forEach not returning boolean

誰能給我一些關於為什么前兩個函數返回未定義而不是布爾值的見解?

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

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

如果選中檢查返回值部分,則返回未定義。

在此處輸入圖片說明

Foreach沒有任何返回類型,可以使用一些 如果必須使用foreach,則可以像在test2一樣使用temp變量並在foreach中進行更改

 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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

說明

當函數沒有顯式返回時。 默認情況下,JavaScript函數為該函數返回undefined

供參考,請看下面的示例。 在這里,內部console.log('hello')正在打印hello但是由於undefined來自內部console.log()返回隱式返回值,因此外部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; } 

Array#forEach不會返回特殊值,具體取決於回調的內部返回值。 它只是迭代所有項目。

Array#some或其對應的Array#every提前返回,具體取決於回調的返回值。


在使用ES6時,如果移交的值是數組的一部分,則可以使用Array#includes ,它返回一個布爾值。

 const array1 = [1, 2, 3]; console.log(array1.includes(2)); // true 

forEach返回未定義。 您要在情況下使用的是array.includes

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM