2017-06-05 55 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; 
    } 
); 
相關問題