作为我的编码训练营的最新任务,我们被要求创建一个函数,该函数将数字数组作为参数并将其输出到字母等级数组。我被卡住了!
我尝试重新设计和重构代码,更改程序不同部分的位置,通过MDN查看...
let grades = []
function getLetterGrades(grades) {
let grade = grades.map
if (grade < 60) {
return "F";
} else if (grade < 70) {
return "D";
} else if (grade < 80) {
return "C";
} else if (grade < 90) {
return "B";
} else if (grade < 100) {
return "A";
}
console.log(grades);
}
getLetterGrades([95, 85, 71]);
结果只会输出我在函数调用中输入的数字。
答案 0 :(得分:3)
您使用的.map()
错误。您正在做的是将map方法与数字进行比较。您什么都没有执行。
function getLetterGrades(grades) {
return grades.map(function(grade) {
if (grade < 60) {
return "F";
} else if (grade < 70) {
return "D";
} else if (grade < 80) {
return "C";
} else if (grade < 90) {
return "B";
} else if (grade < 100) {
return "A";
}
});
}
var letters = getLetterGrades([95, 85, 71]);
console.log(letters)
答案 1 :(得分:1)
看看这个解决方案:
let grades = []
function getLetterGrades(grades) {
// add an array (grade) that will hold the output
let grade = []
// iterate over grades with forEach()
grades.forEach(item => {
// item will be equal 95 on the first iteration
// 85 on the second, and 71 on the third - these
// values come from the passed 'grades' parameter
if (item < 60) {
grade.push("F");
} else if (item < 70) {
grade.push("D");
} else if (item < 80) {
grade.push("C");
} else if (item < 90) {
grade.push("B");
} else if (item < 100) {
grade.push("A");
}
})
// console.log(grade) - NOT grades!
console.log(grade);
}
getLetterGrades([95, 85, 71]);
问题不在于您选择的方法-问题在于您没有完成功能。这是map()
的另一种解决方案:
let grades = []
function getLetterGrades(grades) {
let grade = grades.map(item => {
if (item < 60) {
return "F";
} else if (item < 70) {
return "D";
} else if (item < 80) {
return "C";
} else if (item < 90) {
return "B";
} else if (item < 100) {
return "A";
}
})
// console.log(grade) - NOT grades!
console.log(grade);
}
getLetterGrades([95, 85, 71]);
在这种情况下,forEach()
和map()
之间的主要区别是map()
返回一个NEW数组(这就是为什么您在函数正文中使用return
值)和{ {1}}不需要(我们必须手动创建数组-forEach()
-,然后将值推入该“手工”数组)。
如果不使用手动创建的数组而使用grade
,请看下面的内容:
forEach()
(我使用了forEach()的第二个参数-这是索引)这不是很好的解决方案!为什么?我们通过在// THIS IS NOT A GOOD SOLUTION!
// IT GIVES YOU THE ANSWER IN THIS SMALL EXAMPLE
// (so you see that it's possible)
// BUT IN ANY LARGER CODE THIS IS THE
// 100% SURE SOURCE OF ERRORS.
let grades = []
function getLetterGrades(grades) {
grades.forEach((item, index) => {
if (item < 60) {
grades[index] = "F";
} else if (item < 70) {
grades[index] = "D";
} else if (item < 80) {
grades[index] = "C";
} else if (item < 90) {
grades[index] = "B";
} else if (item < 100) {
grades[index] = "A";
}
})
// console.log(grades) - NOT grade!
console.log(grades);
}
getLetterGrades([95, 85, 71]);
中覆盖原始grades
数组来“破坏”了它-请勿这样做!
答案 2 :(得分:1)
您的主要问题是:
let grade = grades.map
您没有使用.map
调用()
方法,因此grade
结束了对本机map
函数的引用。而且,该函数不是数字,因此所有条件都不成立,因此您继续通过if
语句,并仅记录传入的数组。
相反,您必须调用.map()
并提供其必需的参数(将为源数组中的每个项目调用的函数)。您的if
语句应为该函数的主体:
let grades = []
function getLetterGrades(grades) {
let letterGrades = grades.map(function(grade){
if (grade < 60) {
return "F";
} else if (grade < 70) {
return "D";
} else if (grade < 80) {
return "C";
} else if (grade < 90) {
return "B";
} else if (grade < 100) {
return "A";
}
});
console.log(letterGrades);
}
getLetterGrades([95, 85, 71]);
答案 3 :(得分:0)
接受一个函数并在数组中的每个对象上运行一次。要明确您的使用方式:
function getLetterGrades(grade) {
if (grade < 60) {
return "F";
} else if (grade < 70) {
return "D";
} else if (grade < 80) {
return "C";
} else if (grade < 90) {
return "B";
} else if (grade < 100) {
return "A";
}
}
x = [95, 85, 71];
//=> [A, B, C]
x.map(getLetterGrades);
从功能上讲,这就是其他答案的作用,只是他们没有在命名方法。
帖子被编辑以更改链接,因为注释指出了更好的资源。