我正在尝试将得分 80 或更高的学生的姓名保存在一个变量中,但我无法使用过滤器来做到这一点,它返回整个对象,尽管我指定我希望它打印仅这些对象的键值,即这些学生的姓名。
我的代码:
// Students names/scores
let students = [
{name: "Ahmed" , score: 84},
{name: "Samira" , score: 69},
{name: "Dana" , score: 75},
{name: "Basil" , score: 100},
{name: "Fahad" , score: 91},
{name: "Aljawhara" , score: 80},
{name: "Fadi" , score: 70},
]
// Students who scored 80 or more using filter
let studentsScoredMoreThan80 = students.filter((item,index,array) => {
if(item.score >= 80) return item.name;
})
console.log(studentsScoredMoreThan80);
如何只获取得分 80 或以上的学生的姓名?
答案 0 :(得分:2)
Filter 只是过滤列表,它不会将列表项投影到新结构中。
您正在寻找的是 filter
和 map
的组合。首先过滤您的列表:
let studentsScoredMoreThan80 = students.filter(item => item.score >= 80);
然后将结果映射到您想要的新结构:
studentsScoredMoreThan80 = studentsScoredMoreThan80.map(item => item.name);
答案 1 :(得分:1)
过滤器从数组中删除元素从一个数组开始,根据条件只保留其中的一些元素,然后返回一个新数组,保留原始数组不变。它什么都不做。它期望 true
或 false
作为返回值(表示保留或丢弃),但您返回的是 item.name
(这是真的,所以它的工作方式类似于 true
)。
然后您需要使用 student
将完整的 map
对象转换为一个字符串(它们的名称):
let students = [
{name: "Ahmed" , score: 84},
{name: "Samira" , score: 69},
{name: "Dana" , score: 75},
{name: "Basil" , score: 100},
{name: "Fahad" , score: 91},
{name: "Aljawhara" , score: 80},
{name: "Fadi" , score: 70},
]
// Students who scored 80 or more using filter
let studentsScoredMoreThan80 = students
.filter(student => student.score > 80)
.map( student => student.name);
console.log(studentsScoredMoreThan80)
答案 2 :(得分:0)
'Array.filter'中'callback'的返回值转换为'Boolean',如果'item.score >= 80'返回字符串并转换为'true',否则返回'undefined'并转换为'false',如果您只想要student.name
,请使用Array.map(callback)