ES6 中的解构
Destructuring in ES6
在 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
});
}
您可以在解构时使用 object rest to collect all props except those that need renaming. You can assign new names。然后使用 Object#assign 将所有内容合并到 this
.
注意:对象 rest/spread 仍然是一个提案,它需要 babel transform 才能工作。
searchCreated({ region: regionId, ...otherProps }) {
return Object.assign(this, otherProps, { regionId });
}
在 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
});
}
您可以在解构时使用 object rest to collect all props except those that need renaming. You can assign new names。然后使用 Object#assign 将所有内容合并到 this
.
注意:对象 rest/spread 仍然是一个提案,它需要 babel transform 才能工作。
searchCreated({ region: regionId, ...otherProps }) {
return Object.assign(this, otherProps, { regionId });
}