【问题标题】:How to write a dynamic function for my angular application如何为我的角度应用程序编写动态函数
【发布时间】:2023-03-19 19:19:01
【问题描述】:

我在动态编写这段代码时遇到了问题。

如果将来数据可能有不同的键和值,我如何动态编写testtest 函数?

我的 json 对象看起来像这样:

data = [
    {
      name: 'John',
      id: 1,
      colour: 'Green',
      pet: 'Dog'
    },
    {
      name: 'Sarah',
      id: 2,
      colour: 'Purple',
      pet: 'Cat'
    },
    {
      name: 'Lindsay',
      id: 3,
      colour: 'Blue',
      pet: 'Lizard'
    },
    {
      name: 'Megan',
      id: 4,
      colour: 'Orange',
      pet: 'Dog'
    }
];

我有一个过滤器值

filterValues = {
    name: '',
    id: '',
    colour: '',
    pet: ''
};

现在是一个函数

createFilter(): (data: any, filter: string) => boolean {
    let filterFunction = function(data, filter): boolean {
        let searchTerms = JSON.parse(filter);
        let result = this.testtest(data, searchTerms);
        return result;
    }
    return filterFunction;
}

testtest(data, searchTerms): boolean {
    return data.name.toLowerCase().indexOf(searchTerms.name) !== -1
        && data.id.toString().toLowerCase().indexOf(searchTerms.id) !== -1
        && data.colour.toLowerCase().indexOf(searchTerms.colour) !== -1
        && data.pet.toLowerCase().indexOf(searchTerms.pet) !== -1;
}

【问题讨论】:

    标签: angular typescript dynamic-function


    【解决方案1】:

    你可以这样做:

    testtest(data, searchTerms): boolean {
    var result = false;
    for (var property in data) {
    if (data.hasOwnProperty(property)) {
         result = ( property.toLowerCase().indexOf(searchTerms[property]) !==-1 )
         if(!result){
           return result;
         }   
    }
    else {
      return result;
    }
    }
    }
    

    【讨论】:

      【解决方案2】:

      你可以在 ES6 中使用类似的东西 -

      data.filter(obj => Object.keys(obj).some(key => obj[key] == searchText));
      

      【讨论】:

      • OP 有searchTerms(对象,可能是类似filterValues 的结构),而不是searchText(字符串)
      • 同意。他可以有任何结构和任何过滤器或搜索逻辑。我只是帮他如何使用短语法进行过滤。
      • 但是由于 OP 在他们的代码中使用了data.namedata.id 等,他们可以使用 Angular 管道,所以不需要使用data.filter
      猜你喜欢
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多