小编典典

如何创建React搜索过滤器以搜索多个对象键值

reactjs

我想为我的数据数组创建一个搜索过滤器。它具有多个对象和键,例如:

[
    {
        "fname": "Jayne",
        "lname": "Washington",
        "email": "[email protected]",
        "gender": "female"
    },
    {
        "fname": "Peterson",
        "lname": "Dalton",
        "email": "[email protected]",
        "gender": "male"
    },
    {
        "fname": "Velazquez",
        "lname": "Calderon",
        "email": "[email protected]",
        "gender": "male"
    },
    {
        "fname": "Norman",
        "lname": "Reed",
        "email": "[email protected]",
        "gender": "male"
    }
]

我想要搜索过滤器搜索此数组上的任何地方。例如:当我输入框时,我想搜索对象内部的任何地方。像fname,lname,email,gender

我该怎么做?请帮我

如果我只想限制姓和名的搜索,该怎么做?


阅读 238

收藏
2020-07-22

共1个答案

小编典典

您可以将值保持filter在组件状态,并使用该值查看它是否作为任何字符串包含在任何数组元素属性中。

class App extends React.Component {

  state = {

    filter: "",

    data: [

      {

        fname: "Jayne",

        lname: "Washington",

        email: "[email protected]",

        gender: "female"

      },

      {

        fname: "Peterson",

        lname: "Dalton",

        email: "[email protected]",

        gender: "male"

      },

      {

        fname: "Velazquez",

        lname: "Calderon",

        email: "[email protected]",

        gender: "male"

      },

      {

        fname: "Norman",

        lname: "Reed",

        email: "[email protected]",

        gender: "male"

      }

    ]

  };



  handleChange = event => {

    this.setState({ filter: event.target.value });

  };



  render() {

    const { filter, data } = this.state;

    const lowercasedFilter = filter.toLowerCase();

    const filteredData = data.filter(item => {

      return Object.keys(item).some(key =>

        item[key].toLowerCase().includes(lowercasedFilter)

      );

    });



    return (

      <div>

        <input value={filter} onChange={this.handleChange} />

        {filteredData.map(item => (

          <div key={item.email}>

            <div>

              {item.fname} {item.lname} - {item.gender} - {item.email}

            </div>

          </div>

        ))}

      </div>

    );

  }

}



ReactDOM.render(<App />, document.getElementById("root"));


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>



<div id="root"></div>
2020-07-22