@kachurinets

Как отрефакторить такой код?

Использую на проекте такую функцию для удаления полей фильтра:

clearAllControl() {
        if (this.tableParam.region_id) {
            delete this.tableParam.region_id;
            this.searchForm.get('regionName').patchValue(null);
        }
        if (this.tableParam.district_id) {
            delete this.tableParam.district_id;
            this.searchForm.get('districtName').patchValue(null);
        }
        if (this.tableParam.area_id) {
            delete this.tableParam.area_id;
            this.searchForm.get('areaName').patchValue(null);
        }
        if (this.tableParam.city_id) {
            delete this.tableParam.city_id;
            this.searchForm.get('cityName').patchValue(null);
        }
        if (this.tableParam.place_id) {
            delete this.tableParam.place_id;
            this.searchForm.get('cityName').patchValue(null);
        }
        if (this.tableParam.name) {
            delete this.tableParam.name;
            this.searchForm.get('streetName').patchValue(null);
        }
        this.generateAddressesTable(this.tableParam);
    }

Мне не очень нравится реализация данной функции, как можно ее отрефакторить?
  • Вопрос задан
  • 412 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Общую часть похожих кусков кода превращаем в функцию, а то, чем они различаются, будем передавать в эту функцию в качестве параметров:

[
  { del: 'region_id', search: 'regionName' },
  { del: 'district_id', search: 'districtName' },
  { del: 'area_id', search: 'areaName' },
  { del: 'city_id', search: 'cityName' },
  { del: 'place_id', search: 'cityName' },
  { del: 'name', search: 'streetName' },
].forEach(n => {
  if (this.tableParam[n.del]) {
    delete this.tableParam[n.del];
    this.searchForm.get(n.search).patchValue(null);
  }
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dollar
@dollar
Делай добро и бросай его в воду.
+++
const config = [
  'region', 'district', 'area', 'city',
  {id:'place_id', name:'cityName'}, {id:'name', name:'streetName'},
];

clearAllControl() {
  config.forEach(x=>{
    let id = x.id || (x + '_id');
    let name = x.name || (x + 'Name');
    if (this.tableParam[id]) {
      delete this.tableParam[id];
      this.searchForm.get(name).patchValue(null);
    }
  });
  this.generateAddressesTable(this.tableParam);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы