JavaScript数组filter方法未生效,匹配特定值返回空数组求助
问题分析与解决
核心错误点
你第二次尝试的代码里,filter的回调函数没有返回判断结果——箭头函数用大括号包裹时,必须显式写return,否则默认返回undefined,而undefined在布尔判断中会被视为false,最终导致筛选出空数组。
修正后的代码
let list = [{"key":"-NJdLxqKEJpDE_7zkmF9","createTime":1671436164193,"lastUpdate":1671436164193,"roomHost":"test@test.com","roomId":25930,"roomMembers":["test@test.com"],"roomName":"Test","todo":[{"addUser":"test@test.com","lastUpdate":1671436158447,"taskName":"1"},{"addUser":"test@test.com","lastUpdate":1671436159985,"taskName":"2"}]}] // 显式返回判断结果 let newList = list.filter((item)=>{ return item.key === '-NJdLxqKEJpDE_7zkmF9' }) // 或者用箭头函数的隐式返回(去掉大括号,更简洁) let newList = list.filter(item => item.key === '-NJdLxqKEJpDE_7zkmF9')
初始代码的潜在问题
对于第一次的代码:
const list = this.myList.filter((item) => { return item.key === key })
回调函数本身是正确的,但需要额外排查:
- 变量
key的实际值是否确实是'-NJdLxqKEJpDE_7zkmF9',可以用console.log(key)打印验证,重点检查是否有前后空格、大小写差异或全角/半角符号的区别 this.myList是否真的包含你提供的示例数据,有没有在筛选操作前被意外修改
快速验证技巧
可以先遍历数组直接打印每个对象的key和匹配结果,直观排查问题:
this.myList.forEach(item => { console.log('当前item的key:', item.key) console.log('与目标值是否相等:', item.key === key) })
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

