Разрушение в ES6

1

Есть ли лучший способ достичь этого, используя деструктурирование в es6?

  searchCreated(searchParams) {
    this.regionId = searchParams.region;
    this.maxPrice = searchParams.maxPrice;
    this.minPrice = searchParams.minPrice;
    this.selectedLocalities = searchParams.selectedLocalities;
    this.propertyTypeId = searchParams.propertyTypeId;
    this.minBeds = searchParams.minBeds;
    this.maxBeds = searchParams.maxBeds;
    this.minSize = searchParams.minSize;
    this.maxSize = searchParams.maxSize;
    this.keyword = searchParams.keyword;
    this.ber = searchParams.ber;
}

Если бы все эти ценности были сами по себе, а не свойства this я был бы в порядке. Я просто не уверен в элегантном способе эффективного сопоставления одного объекта с другим

Теги:
ecmascript-6
destructuring

2 ответа

3
Лучший ответ

Потому что вы добавляете все searchParam свойств для this, вы можете использовать Object.assign, которые в основном копирует свойство объекта к другому объекту.

В вашем коде это будет выглядеть так:

searchCreated(searchParams) {
    Object.assign(this, searchParams, { // additional object for custom params
        region: searchParams.regionId,
        customParamName: searchParams.customParam
    }); 
}
  • 0
    Есть крайние случаи , когда имя свойства не всегда совпадают: this.regionId = searchParams.region;
  • 0
    @Kunukn, если это так, я бы порекомендовал синхронизировать подпись вашего интерфейса / модели или использовать геттеры для одноразового использования.
Показать ещё 5 комментариев
1

Вы можете использовать объект rest для сбора всех реквизитов, кроме тех, которые требуют переименования. Вы можете назначать новые имена при деструкции. Затем используйте Object # assign, чтобы объединить все в this.

Примечание: объект rest/spread по-прежнему является предложением, и для его работы требуется преобразование Babel.

searchCreated({ region: regionId, ...otherProps }) {
    return Object.assign(this, otherProps, { regionId });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню