JavaScript将字符串插入到对象迭代中

时间:2018-01-19 14:12:26

标签: javascript angular

我正在为Angular Pipe创建一个函数,其中一个参数需要是模板*ngFor="let row of tableRows | filter: searchText : keyName"中的一个字符串,然后使用它来迭代管道函数中的对象

组件中的

let keyName = 'name.value'

管:

transform(items: any[], searchText: string, keyName: string = ''): any[] {
    if (!items) {
    return [];
    }
    if (!searchText) {
    return items;
    }
    searchText = searchText.toLowerCase();
    console.log(keyName);
    return items.filter( it => {
    return it.keyName.toLowerCase().includes(searchText); //THIS HERE NEEDS TO MATCH THE STRING PROVIDED
    });
}

所以我们假设参数字符串name.value被传递到函数中,it.keyName.toLowerCase()需要被解释为it.name.value.toLowerCase()

1 个答案:

答案 0 :(得分:2)

您可以使用property accessor bracket notation(例如object[property])来访问嵌套属性。

例如,尝试这里描述的deepAccessUsingString函数: https://medium.com/@chekofif/using-es6-s-proxy-for-safe-object-property-access-f42fa4380b2c

function deepAccessUsingString(obj, key){
  return key.split('.').reduce((nestedObject, key) => {
    if(nestedObject && key in nestedObject) {
      return nestedObject[key];
    }
    return undefined;
  }, obj);
}

在代码中使用如下:

return deepAccessUsingString(it, keyName).toLowerCase().includes(searchText);