2017-05-05 10 views
0

.filter()メソッドにオブジェクトプロパティセレクタとして関数パラメータ値を取得しようとして問題があります。角度:オブジェクトプロパティセレクタとして関数パラメータ値を取得できません

これは私のコードです:

myFunction(property, value) { 
    function myFilter(obj) { 
     return obj.details.name == value; 
    } 
    return this._http.get(this.Url).map((response: Response) => response.json().filter(myFilter)); 
} 

は私がreturn obj.property == value;return obj.details.name == value;を交換したいです。

obj。 プロパティは、私の関数のパラメータです。myFunction(プロパティ、値)です。 パラメータ値が正常に機能し、正常に取得されます。

これは私が欲しいものです:

getFilteredFMsBy(property, value) { 
    function specificFilter(obj) { 
     return obj.property == value; 
    } 
    return this._http.get(this.Url).map((response: Response) => response.json().filter(specificFilter)); 
} 

私は関数内でプロパティの値を定義した場合、同じケース。動作しません:

getFilteredFMsBy(property, value) { 
    property = "details.name"; 
    function specificFilter(obj) { 
     return obj.property == value; 
    } 
    return this._http.get(this.Url).map((response: Response) => response.json().filter(specificFilter)); 
} 

ご存じですか?

+0

OBJ [プロパティ]あなたが知っていないプロパティにアクセスできるようになる直接の名前で行います。 – Sebastian

答えて

1

あなたがオブジェクトにアクセスする必要があるように思える[PROP2]この回答から、オブジェクトと文字列 "prop.prop2"

を与えられた[小道具]:Javascript: Get deep value from object by passing path to it as stringあなたがdeepFindを行うことができます。

function deepFind(obj, path) { 
    var paths = path.split('.') 
    , current = obj 
    , i; 

    for (i = 0; i < paths.length; ++i) { 
    if (current[paths[i]] == undefined) { 
     return undefined; 
    } else { 
     current = current[paths[i]]; 
    } 
    } 
    return current; 
} 

はその後

getFilteredFMsBy(property, value) { 
    property = "details.name"; 
    function specificFilter(obj) { 
     return deepFind(obj, property) == value; // <-- use it here 
    } 
    return this._http.get(this.Url).map((response: Response) => response.json().filter(specificFilter)); 
} 
+0

ありがとうございます。できます :) – Jonathan

0

これはいかがですか?

getFilteredFMsBy(property: string, value:any) { 
    return this._http.get(this.Url).map((response: Response) => response.json().filter((obj) => { return obj[property] == value; })); 
} 
関連する問題