2017-08-10 5 views
0

メソッドのindexofがオブジェクト内のさまざまな文字列が似ていることを示すかどうかに基づいて、オブジェクトの配列をフィルタリングするパイプを作成する必要があります。例えばので角2パイプ:オブジェクトとオブジェクトの配列を比較するパイプを作成する方法は?

我々は、アレイ

[{name: "john", 
age: "17"}, 
{ name: "rob", 
age: "20"} 
] 

を持っていると私はそれがオブジェクト{name: "john", age: "17"}を返しますフィルタオブジェクト

{name: "jo", 
age: "1" } 

を持っている場合。

注:数字は意図的に文字列として作成されています。

これを行うパイプを作るにはどうすればいいですか?

+0

に役立ちます願っています。パイプは、ビジネスロジック、フィルタリング、ソートではなく、何が表示されるかに関係するラストマイル形式の変換用に設計されています。コンポーネントTSロジックでフィルタリングとソートを実装します。 –

答えて

1

私は、これはあなたがJavaScriptで行うことができる方法である角度を知らない、私はそれがパイプを乱用しないでください

var data = [{name: "john", 
age: "17"}, 
{ name: "rob", 
age: "20"} 
]; 

var filter = {name: "jo", age: "1" }; 

var filtered = data.filter(function (person) { 
    // check objects keys are the same 
    if (Object.keys(person).join("") !== Object.keys(filter).join("")) return false; 

    //compare values 
    for (var key in filter) { 
     //false if empty string 
     if (filter[key] === "") return false; 
     if(person[key].indexOf(filter[key])) { 
      return false; 
     } 
    } 
    return true; 
}); 
console.log(filtered); 
+0

私はコメントのアドバイスに従います。あなたがここに書いたことは、私を大いに助けます。 – majestyc54

+0

ちょうど質問です。変数の1つがフィルタオブジェクトにない場合でもこれは機能しますか?いいえ、年齢変数がない{名前: 'jo'}と言っていますか? – majestyc54

+0

あなたは正しく私は追加の検証を追加 1:キーが同じである必要があります2:空のフィルタは失敗します。 その前にファイラーを検証した方が良い解決策です – Peter

関連する問題