使用JavaScript .filter和.find返回带有特定字母的项目时有问题



在下面的JavaScript代码中,我试图获得具有字母"Y"或";y"。当我查怎么做的时候,我看到了.filter.find方法。但是这个代码只返回containsY = ['Tommy']。我尝试了for loop,但是.find只返回所提供条件中的第一个元素的值,并且它不返回带有&;y&;s的所有名称。还有比这更好的方法来获得所有的"你"吗?和";y"名字吗?

const students = ["Tommy","Noah","Xander","Adil","Bradley","Nicholas","Damien"]
let containsY = students.filter((student) => student.includes("Y"))
//Look for name with "y", and push it to containsY
containsY.push(students.find((student) => student.includes("y")))
console.log(containsY)

您的filter方法很好。它给出了错误的结果,因为includes是大小写敏感的。

相反,在filter回调中,将student转换为小写,然后检查它是否包含"y":

const students = ["Tommy","Noah","Xander","Adil","Bradley","Nicholas","Damien"]
const res = students.filter((student) => student.toLowerCase().includes("y"))
console.log(res)

使用正则表达式(其优点是只需要一次测试)

const students = ["Tommy", "Noah", "Xander", "Adil", "Bradley", "Nicholas", "Damien"]
const result = students.filter(student => /y/i.test(student))
console.log(result)

或者在一个回调中同时测试.includes('y').includes('Y')

const students = ["Tommy", "Noah", "Xander", "Adil", "Bradley", "Nicholas", "Damien"]
const result = students.filter(student => student.includes('y') || student.includes('Y'));
console.log(result)

最新更新