簡體   English   中英

為什么我的箭頭函數不返回數組,而是返回一個函數聲明

[英]Why doesn't my arrow function return array but instead a function declaration

我試圖編寫一個箭頭函數來計算僅正整數(不包括分數)的平方。

 const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34]; const squareList = (arr) => { "use strict"; const squaredIntegers = (arr) => { let arrayChoosen = arr.filter(ele => ele > 0 && Number.isInteger(ele)); return arrayChoosen.map(x => x * x); } return squaredIntegers; }; // test your code const squaredIntegers = squareList(realNumberArray); console.log(squaredIntegers); 

但是結果是函數聲明,而不是我期望的數組。 但是當我嘗試以這種方式修改代碼時

 const squareList = (arr) => { "use strict"; let squaredIntegers = arr.filter(ele => ele > 0 && Number.isInteger(ele)); squaredIntegers = squaredIntegers.map(val => val * val); return squaredIntegers; }; 

然后輸出我期望的數組。 為什么在第一種情況下它不起作用?

您需要返回squaredIntegers函數的返回值,因此請嘗試使用以下代碼:

 const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34]; const squareList = (arr) => { "use strict"; const squaredIntegers = (a) => { let arrayChoosen = a.filter(ele => ele > 0 && Number.isInteger(ele)); return arrayChoosen.map(x => x * x); } return squaredIntegers(arr); }; // test your code const squaredIntegers = squareList(realNumberArray); console.log(squaredIntegers); 

因為僅返回函數名稱-即-對函數的引用。

相反,您應該調用該函數:

return squaredIntegers();

第二個示例工作正常,因為您實際上是在調用arr.filter()並將其值分配給squaredIntegers

您需要使用arr調用squaredIntegers以獲得新數組。

return squaredIntegers(arr);

 const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34]; const squareList = (arr) => { "use strict"; const squaredIntegers = (arr) => { let arrayChoosen = arr.filter(ele => ele > 0 && Number.isInteger(ele)); return arrayChoosen.map(x => x * x); } return squaredIntegers(arr); }; // test your code const squaredIntegers = squareList(realNumberArray); console.log(squaredIntegers); 

因為第一個squareList返回函數本身,而不是在輸入arr上調用的函數。 您可以改為return其調用:

 const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34]; const squareList = (arr) => { "use strict"; const squaredIntegers = (arr) => { let arrayChoosen = arr.filter(ele => ele > 0 && Number.isInteger(ele)); return arrayChoosen.map(x => x * x); } return squaredIntegers(arr); }; // test your code const squaredIntegers = squareList(realNumberArray); console.log(squaredIntegers); 

因為您在需要返回函數調用的結果時返回了函數。 檢查更正的代碼。

 const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34]; const squareList = (arr) => { "use strict"; const squaredIntegers = (arr) => { let arrayChoosen = arr.filter(ele => ele > 0 && Number.isInteger(ele)); return arrayChoosen.map(x => x * x); } return squaredIntegers(arr); }; // test your code const squaredIntegers = squareList(realNumberArray); console.log(squaredIntegers); 

您返回的是函數而不是函數調用。

更改return squaredIntegers; return squaredIntegers(arr) ;

所以它將成為

const realNumberArray = [4, 5.6, -9.8, 3.14, 42, 6, 8.34];
const squareList = (arr) => {
    "use strict";

    const squaredIntegers = (arr) => {
        let arrayChoosen = arr.filter(ele => ele > 0 && Number.isInteger(ele));
        return arrayChoosen.map(x => x * x);
    }

    return squaredIntegers(arr);
};
// test your code
const squaredIntegers = squareList(realNumberArray);
console.log(squaredIntegers);

暫無
暫無

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

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