Есть ли лучший способ достичь этого, используя деструктурирование в 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
я был бы в порядке. Я просто не уверен в элегантном способе эффективного сопоставления одного объекта с другим
Потому что вы добавляете все searchParam
свойств для this
, вы можете использовать Object.assign
, которые в основном копирует свойство объекта к другому объекту.
В вашем коде это будет выглядеть так:
searchCreated(searchParams) {
Object.assign(this, searchParams, { // additional object for custom params
region: searchParams.regionId,
customParamName: searchParams.customParam
});
}
Вы можете использовать объект rest для сбора всех реквизитов, кроме тех, которые требуют переименования. Вы можете назначать новые имена при деструкции. Затем используйте Object # assign, чтобы объединить все в this
.
Примечание: объект rest/spread по-прежнему является предложением, и для его работы требуется преобразование Babel.
searchCreated({ region: regionId, ...otherProps }) {
return Object.assign(this, otherProps, { regionId });
}
this.regionId = searchParams.region;