Как склонировать массив объектом?

Есть функция принимающая массив объектов:

setDefault(defaultFilters: Filter[]) {
        this.defaultFilters = defaultFilters;
}


Где, Filter это класс:

export class Filter implements FilterModel {}

Как склонировать объект defaultFilters?

Пробовал так: this.defaultFilters = {...defaultFilters};

Но это не работает для объектов классов.

Полный код:

export abstract class FiltersRepository {
    public _filters: Filter[] = [];
    private filtersResponse: Filter[] = [];
    public filters$ = new Subject<Filter[]>();
    private filterUrlBuilder = new FilterUrlBuilder();
    private changes$ = new BehaviorSubject<string>(null);
    private default: Filter[];

    abstract init();

    setDefault(defaultFilters: Filter[]) {
        this.default = defaultFilters.slice();
        this._filters = defaultFilters;
    }

      modifyDefault() {
        this._filters.forEach((_filter) => {
            this.filtersResponse.forEach((responseFilter) => {
                if (_filter.title === responseFilter.title) {
                    if (Array.isArray(responseFilter.collection) && responseFilter.collection.length) {
                        _filter.collection = responseFilter.collection;
                    }
                }
            });
        });
    }
        reset() {
        console.log(this.default);
        this._filters = this.default;
        this.filter();
    }

}


Первым делом вызываю метод setDefault и передаю дефолтные фильтры. Далее вызываю modifyDefault который модицицирует дефолтный фильтр на значения из БД.

Поэтому пытаюсь сделать клон дефолтный фильров чтобы иметь возможность их восстановления в методе reset()
  • Вопрос задан
  • 179 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Как склонировать объект defaultFilters?

defaultFilters - это массив.

Если вопрос: "как склонировать массив": defaultFilters.slice();
Если вопрос: "как склонировать массив и его содержимое": defaultFilters.map(instance => instance.clone()); где clone - метод создающий новый инстанс этого класса, копируя параметры. Потому что просто скопировать публичные поля - абсолютно недостаточно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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