2017-05-05 78 views
0

我尝试将函数参数值作为对象属性选择器检索到.filter()方法中时出现问题。Angular:无法检索函数参数值作为对象属性选择器

这是我的代码:

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; })); 
} 
相关问题