Группировка похожих строк кода в приведенном ниже коде для некоторой фильтрации массива

#javascript #angular #typescript

#javascript #angular #typescript

Вопрос:

Я неоднократно использую одну и ту же функциональность фильтра массива в моих условиях if else, однако в каждом случае различаются только свойства. Есть ли способ сгруппировать их вместе или это правильно, как показано ниже?

 
private _filter(value: string, filterIndex, type: string): string[] {
    let filterArray = [];
    const filterValue = value.toLowerCase();
    if (filterIndex == 0) {  // Index for Type
      if (type === 'Dsc') {
        this.assetTypeData.filter((option) => option.assetTypeDsc.toLowerCase().includes(filterValue)).forEach(element => {
          filterArray.push(element.assetTypeDsc)
        });
      } else {
        this.assetTypeData.filter((option) => option.assetTypeCde.toLowerCase().includes(filterValue)).forEach(element => {
          filterArray.push(element.assetTypeCde)
        });
      }
    } else if (filterIndex == 1) { // Index for Make

      if (type === 'Dsc') {
        this.assetMakeData.filter((option) => option.assetMakeDsc.toLowerCase().includes(filterValue)).forEach(element => {
          filterArray.push(element.assetMakeDsc)
        });
      } else {
        this.assetMakeData.filter((option) => option.assetMakeCde.toLowerCase().includes(filterValue)).forEach(element => {
          filterArray.push(element.assetMakeCde)
        });
      }
}

 

Ответ №1:

попытался сгруппировать все, что можно было сгруппировать

 private _filter(value: string, filterIndex, type: string): string[] {
    const filterValue = value.toLowerCase();
    return (filterIndex == 0 ? this.assetTypeData : this.assetMakeData)
       .map(option => option[(filterIndex == 0 ? 'assetType': 'assetMake')   type])
       .filter(assetValue => assetValue.toLowerCase().includes(filterValue));
}
 

Комментарии:

1. Оцените усилия, Андрей, на самом деле эта функция может быть расширена с помощью дополнительных условий if else, поэтому она может не наилучшим образом адаптироваться к этим изменениям

2. тем не менее, кажется, что логика «фильтра» останется прежней. по крайней мере, вы могли бы сгруппировать логику фильтра