将一个对象解构为另一个对象
Destructuring an object into another object
我正在尝试将我的代码更新为 es6。
除了这部分,我将所有其他代码更新为 es6 语法。
我了解解构的主要概念(也许?),
但我不知道如何对该代码进行解构(const userData
部分)。
我想让这段代码更清晰。
$scope.doRegister = (registerForm) => {
const userData = {
emailAddress: $scope.registerData.email,
password: $scope.registerData.password,
firstName: $scope.registerData.first,
lastName: $scope.registerData.last
};
userService.registerUser(userData)
.then((userData) => {
$ionicHistory.nextViewOptions({ historyRoot: true });
$state.go('app.deviceSetup');
})
.catch((err) => {
console.error(err);
});
}
您实质上是在尝试 "destructure" $scope.registerData
进入一个新对象 userData
。但是解构只支持解构为变量,不支持对象。因此,你可以这样写:
const {
email: emailAddress,
password,
first: firstName,
last: lastName
} = $scope.registerData;
const userData = {emailAddress, password, firstName, lastName};
上面第一行是解构;第二行使用 "shorthand property notation" 构建新对象。
关于如何解构为新对象的 SO 已经有很多建议和问题,但是没有简单、明显的方法可以做到这一点。最接近的可能是使用 object rest syntax,只有当您知道要省略哪些属性时才会起作用,不允许重命名,会创建额外的变量 dontNeed1
等,可能会也可能不会有本机浏览器支持。
const {...userData, dontNeed1, dontNeed2} = ...$scope.registerData;
在这种情况下,完全不尝试使用解构当然是一个可行的选择,甚至更可取,and/or使用@BrianMcCutchon 的方法。
我认为解构不是执行此操作的正确方法。但是,还有其他方法可以清理此代码。最简单的就是把$scope.registerData
保存到一个临时变量:
const rd = $scope.registerData
const userData = {
emailAddress: rd.email,
password: rd.password,
firstName: rd.first,
lastName: rd.last
};
不要误会我的意思,您可以使用解构,但您最终不得不在某处重复字段名称。这个更干净。
我正在尝试将我的代码更新为 es6。
除了这部分,我将所有其他代码更新为 es6 语法。
我了解解构的主要概念(也许?),
但我不知道如何对该代码进行解构(const userData
部分)。
我想让这段代码更清晰。
$scope.doRegister = (registerForm) => {
const userData = {
emailAddress: $scope.registerData.email,
password: $scope.registerData.password,
firstName: $scope.registerData.first,
lastName: $scope.registerData.last
};
userService.registerUser(userData)
.then((userData) => {
$ionicHistory.nextViewOptions({ historyRoot: true });
$state.go('app.deviceSetup');
})
.catch((err) => {
console.error(err);
});
}
您实质上是在尝试 "destructure" $scope.registerData
进入一个新对象 userData
。但是解构只支持解构为变量,不支持对象。因此,你可以这样写:
const {
email: emailAddress,
password,
first: firstName,
last: lastName
} = $scope.registerData;
const userData = {emailAddress, password, firstName, lastName};
上面第一行是解构;第二行使用 "shorthand property notation" 构建新对象。
关于如何解构为新对象的 SO 已经有很多建议和问题,但是没有简单、明显的方法可以做到这一点。最接近的可能是使用 object rest syntax,只有当您知道要省略哪些属性时才会起作用,不允许重命名,会创建额外的变量 dontNeed1
等,可能会也可能不会有本机浏览器支持。
const {...userData, dontNeed1, dontNeed2} = ...$scope.registerData;
在这种情况下,完全不尝试使用解构当然是一个可行的选择,甚至更可取,and/or使用@BrianMcCutchon 的方法。
我认为解构不是执行此操作的正确方法。但是,还有其他方法可以清理此代码。最简单的就是把$scope.registerData
保存到一个临时变量:
const rd = $scope.registerData
const userData = {
emailAddress: rd.email,
password: rd.password,
firstName: rd.first,
lastName: rd.last
};
不要误会我的意思,您可以使用解构,但您最终不得不在某处重复字段名称。这个更干净。