处理 javascript 中相同 属性 的多重赋值的最佳方法
Best way to handle multiple assignment of the same property in javascript
情况是这样的:
user.username = body.username;
user.name = body.name;
user.surname = body.surname;
user.email = body.email;
user.password = body.password;
user.privilege = body.privilege;
user.pin = body.pin;
user.rfidTag = body.rfidTag;
我这样修改它,它按预期工作:
for (let propt in body) {
user[propt] = body[propt];
}
我想知道是否有更优雅的写法,也许有 属性 检查。
[更新]:
有多种方法可以解决这个问题。
如果不需要保留用户属性:
user = Object.assign( {}, body );
或提案价差属性:
user = { ...body };
否则保留用户属性:
Object.assign( user, body );
您可以使用 Object.assign
user = Object.assign( {}, body );
演示
var body = { user : "abc", username : "some-value" };
var user = Object.assign( {}, body );
console.log( user );
编辑
如果用户已有一些您不想删除的属性(不在正文中),那么
Object.assign( user, body );
您可以使用spread syntax ...
user = { ...body };
var body = { prop1 : "1", prop2 : "2", prop3 : "3" };
var user = { ...body };
console.log( user );
如果您已经将 user
对象初始化为其默认值,您可以使用它来仅复制您需要的字段。
var defaultUser = {username: null, name: null, surname: null, privilege: 1|2|4}
function createUser (user, body) {
var newUser = {}; //Object.create (user);
for (let key in user) {
newUser [key] = body [key] || user [key];
}
return newUser
}
newUser = createUser (defaultUser, body);
对象扩展运算符(在 ES6 中引入)可用于将一个对象的所有属性分配给另一个对象,从而有效地克隆它。
var user = {...body}
但是,您将无法控制正在复制的字段。因此正文中包含的每个字段最终都会出现在您的用户中。
这可能是也可能不是您要查找的内容。
情况是这样的:
user.username = body.username;
user.name = body.name;
user.surname = body.surname;
user.email = body.email;
user.password = body.password;
user.privilege = body.privilege;
user.pin = body.pin;
user.rfidTag = body.rfidTag;
我这样修改它,它按预期工作:
for (let propt in body) {
user[propt] = body[propt];
}
我想知道是否有更优雅的写法,也许有 属性 检查。
[更新]: 有多种方法可以解决这个问题。
如果不需要保留用户属性:
user = Object.assign( {}, body );
或提案价差属性:
user = { ...body };
否则保留用户属性:
Object.assign( user, body );
您可以使用 Object.assign
user = Object.assign( {}, body );
演示
var body = { user : "abc", username : "some-value" };
var user = Object.assign( {}, body );
console.log( user );
编辑
如果用户已有一些您不想删除的属性(不在正文中),那么
Object.assign( user, body );
您可以使用spread syntax ...
user = { ...body };
var body = { prop1 : "1", prop2 : "2", prop3 : "3" };
var user = { ...body };
console.log( user );
如果您已经将 user
对象初始化为其默认值,您可以使用它来仅复制您需要的字段。
var defaultUser = {username: null, name: null, surname: null, privilege: 1|2|4}
function createUser (user, body) {
var newUser = {}; //Object.create (user);
for (let key in user) {
newUser [key] = body [key] || user [key];
}
return newUser
}
newUser = createUser (defaultUser, body);
对象扩展运算符(在 ES6 中引入)可用于将一个对象的所有属性分配给另一个对象,从而有效地克隆它。
var user = {...body}
但是,您将无法控制正在复制的字段。因此正文中包含的每个字段最终都会出现在您的用户中。
这可能是也可能不是您要查找的内容。