2017-06-05 47 views
1

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

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', 
    }]; 
} 

我想创造出它过滤所有字段想,如果我搜索约翰然后应显示约翰列表中选择一个搜索栏,如果我搜索巴黎那么所有应该显示巴黎的条目..因此,我写的代码只搜索名称,因为我已指定名称。我想搜索输入的数据以搜索所有字段。

+0

更新与采样数据的疑问句和预期的输出,它就会很容易帮助你:) –

+0

@Mayank Shukla我已更新问题。 –

+0

在contact.name和contact.city上使用indexOf的简单if语句不会成功吗?编辑:你可以循环你的obj,如果你想它是通用的 – Nevosis

回答

0

过滤准则可以是indexOfObject.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)

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; 
    } 
); 
相关问题