Как можно улучшить участок код?

ngAfterViewInit() {
        combineLatest(...this.filtersList.map((f) => f.filtersChanges)).subscribe(
            (selectedFilters) => {
                const filterUrlCombiner = new FilterUrlCombiner();
                const filterUrlBuilders = selectedFilters.map((filter) => new FilterUrlBuilder(filter, ComparingOperation.eq));
                filterUrlBuilders.forEach((filter) => {
                    filter.buildStringUrl();
                });

                const filterUrls = filterUrlBuilders.filter((filter) => filter.url).map((filter) => filter.url);
                filterUrlCombiner.combineUrl(filterUrls);

                this.filterBy = filterUrlCombiner.getUrl();
                this.settingsService.setDistributionFiltersSettings(selectedFilters);
                setTimeout(
                    () => (this.buttonDisabled = !selectedFilters.some((item) => item && item.selected && item.selected.length > 0)),
                );
            },
            (error) => {
                console.log('ERROR: ' + error);
            },
        );
    }


Данных код на входе имеет массив значений selectedFilters, далее мэппит каждый массив FilterUrlBuilder, после чего формирует для каждого элемента FilterUrlBuilder - значение buildStringUrl.

В конце отдает масссив сформированных url классу:
filterUrlCombiner.combineUrl(filterUrls);

И после результат назначает переменной:

this.filterBy = filterUrlCombiner.getUrl();

Мне не нравится изляшняя пляска с перебором, а так же чересчур раскрытая реализация....
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
Aetae
@Aetae
Тлен
filterUrlBuilders.filter((filter) => filter.url).map((filter) => filter.url);

Это обычно делается так:
filterUrlBuilders.map(filter => filter.url).filter(Boolean);

В целом же весь вопрос в классах FilterUrlCombiner и FilterUrlBuilder: они действительно нужны и выполняют какую-то полезную работу или у кого-то энтерпрайз головного мозга?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Junart1 Автор вопроса
Все дело в том, что эти классы принимаю элемент массива. И ткак к у меня массив - я использую циклы
Ответ написан
Ваш ответ на вопрос

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

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