Javascript React/JS过滤器出现故障

Javascript React/JS过滤器出现故障,javascript,json,reactjs,filtering,Javascript,Json,Reactjs,Filtering,我试图实现一个过滤器函数,当用户在搜索栏中键入内容时,它能够在两个单独的JSON字段中进行搜索。搜索整个JSON会返回错误,如果我重复这个函数,两个相似的函数会相互抵消 我当前的筛选功能: let filteredOArt = origArt.filter((origAItem) => { return origAItem.authors.toLowerCase().includes(this.state.search.toLowerCase())

我试图实现一个过滤器函数,当用户在搜索栏中键入内容时,它能够在两个单独的JSON字段中进行搜索。搜索整个JSON会返回错误,如果我重复这个函数,两个相似的函数会相互抵消

我当前的筛选功能:

let filteredOArt = origArt.filter((origAItem) => {
                return origAItem.authors.toLowerCase().includes(this.state.search.toLowerCase())
            });
我希望能够在“作者”字段以及“描述”字段中进行搜索

在React渲染之前,我让此函数监听状态:

updateSearch(event) {
    this.setState({ search: event.target.value }) 
}
然后,我的搜索功能位于React返回中的输入字段中:

<h6>Search by author name: <input type="text" value={this.state.search} onChange={this.updateSearch.bind(this)} /></h6>
按作者姓名搜索:

您可以像这样调整函数

let filteredOArt = origArt.filter((origAItem) => {
       return (
(origAItem.authors.toLowerCase().includes(this.state.search.toLowerCase())||

(origAItem.description.toLowerCase().includes(this.state.search.toLowerCase())
       )
)
        });

实际上,您可以对这两个字段进行筛选

如果您有searchValue和包含对象的数组,则可以通过以下方式进行筛选:

const filterByAuthorOrDescription = (searchValue, array) =>
  array.filter(
    item =>
      item.authors.toLowerCase().includes(searchValue.toLowerCase()) ||
      item.description.toLowerCase().includes(searchValue.toLowerCase())
  );
filtered
现在将包含一个对象数组,其中包含您可以映射到的描述或作者中的搜索值。

您可以使用它来检查至少一个字段的筛选器是否为正值:

let filteredOArt = origArt.filter(origAItem => ['authors', 'description'].some(field => origAItem.[field].toLowerCase().includes(this.state.search.toLowerCase())))
只需迭代您想要使用的不同字段名

Some
将返回
true
,如果提及的任何字段包含您的字符串,并避免在代码中重复

长语法:

origArt.filter(origAItem => {
    return ['authors', 'description'].some(field => origAItem.[field].toLowerCase().includes(this.state.search.toLowerCase()))
})

您可以分享您的
origArt
内容吗?如果我们看不到数据的结构,那么很难说过滤器是否起作用。它是这样设置的:“文章”:[{“作者”:“Iaizzo PA,Pozos RS:,“描述”:“运动引起的踝关节生理活动震颤振幅改变”。,“出版商”:《应用生理学杂志》53:1164-1170,,“日期”:“1982,,“journalID”:“PMID:7174409”},希望这能有所帮助!谢谢,它工作得很好,代码也很容易阅读!
origArt.filter(origAItem => {
    return ['authors', 'description'].some(field => origAItem.[field].toLowerCase().includes(this.state.search.toLowerCase()))
})