2017-07-27 9 views
1

ここでのフィルタ機能は素晴らしいですが、ファーストネームのみをフィルタリングします(コードを参照)。だから私は姓と電話でフィルタリングする "ベスト"な方法が何であるか疑問に思っていた(画像参照)! はここに、現時点での私のフィルターです:Reactで複数の値をフィルタリングする

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

そして、ここではイメージです: enter image description here

どうもありがとう! :あなたはJavascript配列レベルでフィルタリングを使用している

答えて

1

Dので、ちょうどあなたの基準を拡張:

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 
) 
}); 
+0

DRYの原則にもう一度触れることはありませんか?あなたのお返事ありがとう! :D –

+0

小文字に正規化して、あなたが持っている各属性(つまり、コードの最適化:)に対して呼び出す関数を作成することができます。 'ignoreCaseCompare(value1、value2) 'のようなもの – Samich

+0

するでしょう! SOが私にハハをさせるときにあなたの答えを受け入れるだろう! –

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; 
     ) 
     }) 
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]); 
 
)

+0

ありがとう、ママ! –

関連する問題