如何过滤所有反应中的字段?

时间:2017-06-05 11:55:36

标签: reactjs

如何过滤所有反应中的字段? 我编写了一个只过滤指定字段的代码。

 let filteredContacts=this.props.contacts.filter(
         (contact)=>{
           return contact.name.indexOf(this.state.search)!==-1;
         }
       );

上面的代码只返回过滤后的名称...但我想过滤名称,年龄,城市工作。

这是数据文件:

export default function(){
  return [{
    key: 1,
    name: 'Steve',
    city: 'Paris',
  }, {
    key: 2,
    name: 'Tim',
    city: 'London',
  }, {
    key: 3,
    name: 'Stella',
    city: 'Bankok',
  }, {
    key: 4,
    name: 'John',
    city: 'Paris',
  }];
}

我想创建一个搜索栏,其中筛选所有字段,如果我搜索john,则应显示john列表,如果我搜索paris,则应显示所有具有paris的条目。所以代码哪个我只写了名字的搜索,因为我指定了名称..我想搜索输入的数据来搜索所有字段。

2 个答案:

答案 0 :(得分:0)

嗯,我快速尝试,在你的钥匙上做一个循环。也许有一种更优雅的方式。

 let filteredContacts=this.props.contacts.filter(
     (contact)=>{
       var found = false;
       Object.keys(contact).map(function(key, index) {
         if (contact[key].indexOf(this.state.search) >= 0)
            found = true;
       }
       return found;
     }
  );

答案 1 :(得分:0)

过滤条件可以是indexOf上的Object.values(),如下所示,但它只会提供完整匹配

var data = [{
    key: 1,
    name: 'Steve',
    city: 'Paris',
  }, {
    key: 2,
    name: 'Tim',
    city: 'London',
  }, {
    key: 3,
    name: 'Stella',
    city: 'Bankok',
  }, {
    key: 4,
    name: 'John',
    city: 'Paris',
  }];
  
  var value = 'Paris'
  var newData = data.filter((obj) => {
      return Object.values(obj).indexOf(value) > -1
  })
  console.log(newData)