2016-11-01 9 views
0

の配列によってオブジェクトの配列をフィルタリング:、私は次のコードを使用してオブジェクトの配列をフィルタリングしていた文字列

filterCategory(category: [string]) { 
    this.projects = this.projects.filter(project => project.category == category); 
    } 

それは程度に動作しますが、私はそれが任意のオブジェクトを返しますので、それを改善したいですカテゴリ内にカテゴリの文字列があります。

project: [{ 
    name: "thing1" 
    category: ["Design", "Web Design"] 
    }, { 
    name: "thing2" 
    category: ["Web Design"] 
    }, { 
    name: "thing3" 
    category: ["Design"] 
    }, { 
    name: "thing4" 
    category: ["Design", "Web Design"] 
    }] 

filterCategory("Design") 

filter現在のところ、カテゴリ3のデザインは物3を返すだけですが、物1、物3、物4を返すようにしたいと思います。

答えて

2

JavaScriptのArray.indexOfは、一致する各配列値を調べます。

project => project.category.indexOf(category) !== -1

+0

これが機能しました!コードの最後に-1が何をしているのか気になりますか? – Jleibham

+1

indexOf関数は、戻り値が-1でないことを確認する必要のある一致を探しているので、値が見つからない場合は-1を返します。 > -1は、チェックを実行する別の同等の手段になります。 – silentsod

1
project => { 
    for (let i = 0; i < project.category.length; i++) { 
     if (project.category[i] === category) { 
      return true; 
     } 
    } 
    return false; 
} 
0

私はES6でこれを行うには、別の(より少ないコード)方法を見つけました。代わりにproject => project.category.indexOf(category) !== -1のあなたは、最終的なコードは次のようになりますので、同じことをやって.INCLUDESを使用することができます:あなたはES6を使用している場合

project => project.category.includes(category) 

は私のために、ほんの少しのクリーナーを同じように働きました。

関連する問題