为什么过滤方法不能正常工作?

时间:2021-06-16 14:14:20

标签: javascript html css

我正在尝试将得分 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);

这是它打印的内容: enter image description here

如何只获取得分 80 或以上的学生的姓名?

3 个答案:

答案 0 :(得分:2)

Filter 只是过滤列表,它不会将列表项投影到新结构中。

您正在寻找的是 filter map 的组合。首先过滤您的列表:

let studentsScoredMoreThan80 = students.filter(item => item.score >= 80);

然后将结果映射到您想要的新结构:

studentsScoredMoreThan80 = studentsScoredMoreThan80.map(item => item.name);

答案 1 :(得分:1)

过滤器从数组中删除元素从一个数组开始,根据条件只保留其中的一些元素,然后返回一个新数组,保留原始数组不变。它什么都不做。它期望 truefalse 作为返回值(表示保留或丢弃),但您返回的是 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)

相关问题