[英]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.