#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. тем не менее, кажется, что логика «фильтра» останется прежней. по крайней мере, вы могли бы сгруппировать логику фильтра