【问题标题】:Filtering issues in grid过滤网格中的问题
【发布时间】:2018-07-30 15:01:59
【问题描述】:

我有用于网格搜索的过滤管道逻辑

results.filter(item => Object.keys(item)
          .some(key => searchTerm.split(',').some(arg =>item[key]? item[key].toString().toLowerCase().includes(arg.toString().toLowerCase()):""))
         ); 

上面的代码会在数组列表的所有列中搜索一个关键字,它绑定了网格,但是我不需要搜索数组列表中的所有列。

我只需要搜索网格中显示的列。

所以,逻辑如下:

results
          .filter(item => (item.ProxyName.toLowerCase().includes(searchTerm.toLowerCase()) || 
                            item.ProxyType.toLowerCase().includes(searchTerm.toLowerCase())||
                            item.SA_SPOC_DL.toLowerCase().includes(searchTerm.toLowerCase())||
                            item.AssignmentGroup.toLowerCase().includes(searchTerm.toLowerCase()))
                  );
         .filter(item => Object.keys(item)
          .some(key => searchTerm.split(',').some(arg =>item[key]? item[key].toString().toLowerCase().includes(arg.toString().toLowerCase()):""))
         );  

为此,我决定传递一个逗号分隔的列数组来过滤

string searchcolumns = ["ProxyName,ProxyType,SA_SPOC_DL"]

如果我传递逗号分隔的列数组,我如何重写逻辑?

【问题讨论】:

    标签: arrays angular linq typescript logic


    【解决方案1】:

    我没有触及你的其他逻辑,只是重构了你需要使用列的部分。你只需要遍历列列表:

    const itemList: any[] = [
      { ProxyName: 'AG', AssignmentGroup: 'AG', ProxyType: 'PT', SA_SPOC_DL: 'SA2' },
      { ProxyName: 'B1', AssignmentGroup: 'AG123', ProxyType: 'AG', SA_SPOC_DL: 'SB2' },
      { ProxyName: 'C1', AssignmentGroup: 'AG', ProxyType: 'PT', SA_SPOC_DL: 'SC2' },
      { ProxyName: 'D1', AssignmentGroup: 'A', ProxyType: 'PT', SA_SPOC_DL: 'AG' },
      { ProxyName: 'E1', AssignmentGroup: 'AG', ProxyType: 'PT', SA_SPOC_DL: '' },
      { ProxyName: 'F1', AssignmentGroup: 'A', ProxyType: 'PT', SA_SPOC_DL: '' }
    ];
    
    const searchColumns = ['ProxyName', 'ProxyType', 'SA_SPOC_DL', 'AssignmentGroup'];
    
    const result = filterResult('AG', searchColumns, itemList);
    
    function filterResult(searchTerm: String, searchcolumns: string[], results: any[]) {
      const resultSet: any[] = [];
      searchcolumns.forEach(column => {
        results.filter(item =>
          item[column].toLowerCase().includes(searchTerm.toLowerCase())
          && !resultSet.includes(column)
        ).filter(item => Object.keys(item)
          .some(key => searchTerm.split(',')
            .some(arg => item[key] ? item[key].toString().toLowerCase().includes(arg.toString().toLowerCase()) : '')))
          .forEach(element => { if (!resultSet.includes(element)) { resultSet.push(element); } });
      });
    
      return resultSet;
    }
    

    【讨论】:

    • 只有数组中的最后一列,搜索有效,其他列无效
    • searchcolumns.forEach(column => { filteredresults =results.filter(item => item[column]?item[column].toLowerCase().includes(searchTerm.toLowerCase()): '' ) .filter(item => Object.keys(item) .some(key => searchTerm.split(',') .some(arg => item[key] ? item[key].toString().toLowerCase() .includes(arg.toString().toLowerCase()) : ''))); })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    相关资源
    最近更新 更多