在javascript

时间:2017-12-27 13:14:58

标签: javascript node.js ecmascript-6 ecmascript-5 ecmascript-7

情况就是这样:

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];
}

我想知道是否有一种更优雅的方式来写这个,也许是有财产检查的东西。

[UPDATE] : 有多种方法可以解决这个问题。

如果您不需要保留用户属性:

user = Object.assign( {}, body );

或提案传播属性:

user = { ...body };

否则保留用户的属性:

Object.assign( user, body );

3 个答案:

答案 0 :(得分:5)

您可以使用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 );

答案 1 :(得分:1)

您可以使用spread syntax ...

user = { ...body };

&#13;
&#13;
var body = { prop1 : "1", prop2 : "2", prop3 : "3" };
var user = { ...body };
console.log( user );
&#13;
&#13;
&#13;

答案 2 :(得分:0)

如果您已将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);

Object spread运算符(在ES6中引入)可用于将一个对象的所有属性分配给另一个对象,从而有效地克隆它。

var user = {...body} 

但是,您无法控制要复制的字段。因此,身体中包含的每个字段都将以您的用户身份结束。

这可能是也可能不是你想要的。