我正在尝试通过实现一些功能来获取给定年份的最大心率。 arrayCalc函数在名为“ arrRes”的空数组上使用for循环来推送新值。同时,calcAge函数根据当前年份计算一个人的年龄。我希望使用传递了一些参数的arrayCalc函数内部的.map和arrow函数,而不是for循环。我不知道该去哪里。
我尝试使用MDN网络文档之类的资源来阐明.map和arrow功能。我一知道它的语法及其实现,就开始将.map和arrow函数包装到一个称为“ arrRes”的常量变量中。基本上,我正在尝试重现“旧” arrayCalc中给出的结果。
const years = [1990, 1965, 1937, 2005, 1998];
// The function I'm trying to replicate
function arrayCalc(arr, fn) {
const arrRes = [];
for (let i = 0; i < arr.length; i++) {
arrRes.push(fn(arr[i]));
}
return arrRes;
}
// My attempt to shorten the arrayCalc function using .map and the arrow
/* function arrayCalc(arr, fn){
const arrRes = arr.map(arry => arry);
} */
function calcAge(ex) {
return new Date().getFullYear() - ex;
}
function maxHeartRate(ex) {
const result_2 = Math.round(206.9 - (0.67 * ex))
return (ex >= 18 && ex <= 81 ? result_2 : -1)
}
const ages = arrayCalc(years, calcAge);
const heartRate = arrayCalc(ages, maxHeartRate);
console.log(ages);
console.log(heartRate);
我的输出应为// [29,54,82,14,21]。但是控制台给我一个错误“未捕获的TypeError:无法读取未定义的属性'map'”。显然,我尝试实现的代码被注释掉以产生结果。任何帮助表示赞赏。
答案 0 :(得分:1)
您可以将该函数用作映射参数。
function arrayCalc(arr, fn) {
return arr.map(fn);
}
const years = [1990, 1965, 1937, 2005, 1998];
function arrayCalc(arr, fn) {
return arr.map(fn);
}
function calcAge(ex) {
return new Date().getFullYear() - ex;
}
function maxHeartRate(ex) {
const result_2 = Math.round(206.9 - (0.67 * ex))
return (ex >= 18 && ex <= 81 ? result_2 : -1)
}
const ages = arrayCalc(years, calcAge);
const heartRate = arrayCalc(ages, maxHeartRate);
console.log(ages);
console.log(heartRate);
.as-console-wrapper { max-height: 100% !important; top: 0; }
或者直接在回调中使用Array#map
来缩短时间。
function calcAge(ex) {
return new Date().getFullYear() - ex;
}
function maxHeartRate(ex) {
const result_2 = Math.round(206.9 - (0.67 * ex))
return ex >= 18 && ex <= 81 ? result_2 : -1;
}
const years = [1990, 1965, 1937, 2005, 1998];
const ages = years.map(calcAge);
const heartRate = ages.map(maxHeartRate);
console.log(ages);
console.log(heartRate);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
您缺少从函数中返回值的功能,还应该从执行fn
函数而不是arr
的函数中返回值:
function arrayCalc(arr, fn){
const arrRes = arr.map(a => fn(a)); // and not .map(arr => arr)
return arrRes; // missing return statement
}
工作示例:
const years = [1990, 1965, 1937, 2005, 1998];
// The function I'm trying to replicate
/*function arrayCalc(arr, fn) {
const arrRes = [];
for (let i = 0; i < arr.length; i++) {
arrRes.push(fn(arr[i]));
}
return arrRes;
}*/
// My attempt to shorten the arrayCalc function using .map and the arrow
function arrayCalc(arr, fn){
const arrRes = arr.map(a => fn(a));
return arrRes;
// OR
// return arr.map(fn);
}
function calcAge(ex) {
return new Date().getFullYear() - ex;
}
function maxHeartRate(ex) {
const result_2 = Math.round(206.9 - (0.67 * ex))
return (ex >= 18 && ex <= 81 ? result_2 : -1)
}
const ages = arrayCalc(years, calcAge);
const heartRate = arrayCalc(ages, maxHeartRate);
console.log(ages);
console.log(heartRate);