【发布时间】:2022-01-15 01:51:48
【问题描述】:
我正在尝试过滤一个对象数组(在我的例子中是专辑),但是我收到了这个错误并且我尝试的所有方法都不起作用。
我的搜索栏:
<input type="search" placeholder={" "} onChange={e => onChangeHandler(e.target.value)} value={text}/>
我的 onChangeHandler
const onChangeHandler =(text) => {
let matches = []
if (text.length > 0){
matches = albums.filter(album => {
const regex = new RegExp(`${text}`, "gi")
return (album.artist.matches(regex));
});
}
console.log('matches', matches)
setSuggestions(matches)
setText(text)
}
当我尝试时,它可以工作并且我会在控制台中获得匹配项,但前提是我正确键入所有内容并且区分大小写。这不是目标。
return (album.artist === text);
【问题讨论】:
-
你的相册是什么样子的?
-
这与正则表达式无关,
album.artist似乎是undefined。 -
你能告诉我们你的相册数组是什么样的吗?如果它返回“无法读取未定义的属性匹配”,则表示专辑.艺术家未定义
-
正如大家所说,您很可能缺少“专辑”的“艺术家”。您可以使用
return (album?.artist?.matches?.(regex));之类的可选链接来解决这个问题,这样您的过滤器就会过滤掉任何没有艺术家信息的专辑。 -
@OrionCygnus 这个工作。谢谢!
标签: javascript reactjs filter