在React中过滤多个值

时间:2017-07-27 20:33:54

标签: javascript reactjs filter

我的过滤功能在这里效果很好,但它只过滤了名字(参见代码)。所以我想知道"最好的"通过姓氏和手机过滤它的方法(见图)! 这是我目前的过滤器:

const filteredUsers = this.state.dataToDisplay.filter(item => {
  return (
    /*Only firstname!*/item.name.toLowerCase().indexOf(this.state.search.toLowerCase()) >= 0
  )
})

以下是图片: enter image description here

非常感谢! :d

3 个答案:

答案 0 :(得分:4)

您正在使用Javascript数组级别的过滤,因此只需扩展您的条件:

const filteredUsers = this.state.dataToDisplay.filter(item => {
  const query = this.state.search.toLowerCase();

  return (
    item.name.toLowerCase().indexOf(query) >= 0 ||
    item.surname.toLowerCase().indexOf(query) >= 0 || 
    item.phone.toLowerCase().indexOf(query) >= 0
  )
});

答案 1 :(得分:1)

只需添加更多条件即可过滤功能

    const filteredUsers = this.state.dataToDisplay.filter(item => {
          return (
              item.name.toLowerCase().indexOf(this.state.search.toLowerCase()) >= 0 
              || item.surname.toLowerCase().indexOf(this.state.search.toLowerCase()) >= 0 
              || item.phone.toLowerCase().indexOf(this.state.search.toLowerCase()) >= 0;
          )
        })

答案 2 :(得分:1)

你可以使用类似这样的代码,例如:

const filterField = (search, value) => value.toLowerCase().indexOf(search.toLowerCase()) >= 0;

const orFilter = (search, values) => values.some(filterField.bind(null, search));

const filteredUsers = this.state.dataToDisplay.filter(item =>
  orFilter(this.state.search, [item.name, item.surname, phone]);
)