2016-11-28 73 views
-1

我有以下对象:如何正确地分配对象属性是JS

{ 
    "_id": "583c4e054c99d310f543b11e", 
    "cellphone": "123456", 
    "password": "$2a$10$d3SeD5CCzTo6wBR/4SGUu.i7vUvX98N1NlpBTwDdWCRrIYcVwWmCO", 
    "fullname": "some name", 
    "gender": "male", 
    "avatar": { 
    "_id": "583c4e054c99d310f543b11d", 
    "__v": 0, 
    "url": "", 
    "likesCount": 0, 
    "description": "Hey guys" 
    }, 
    "__v": 0 
} 

通过下面的代码我想不从的MongoDB(__v),并用重命名_id为ID属性来创建一个新的对象。

let plainUser = { 
    id: user._id, 
    ...user.toObject(), 
    } 

    delete plainUser._id; 
    delete plainUser.password; 
    delete plainUser.__v; 
    delete plainUser.avatar._id; 
    delete plainUser.avatar.__v; 

    return res.send(plainUser); 

我想我可以改变它。任何建议如何正确使用ES6改进我的代码?

+1

'{。 ..user.toObject(),}'是无效的ES6。 –

回答

2

更好更明确一些,以保持其性能,而不是指定哪些应该被删除。而delete效率很低。所以只是去

return res.send({ 
    id: user._id, 
    cellphone: user.cellphone, 
    fullname: user.fullname, 
    gender: user.gender, 
    avatar: { 
     url: user.avatar.url, 
     likesCount: user.avatar.likesCount, 
     description: user.avatar.description 
    } 
}); 

对于一些简化,看看这种方法从One-liner to take some properties from object in ES 6

const {_id: id, cellphone, fullname, gender} = user; 
const avatar = (({url, likesCount, description}) => ({url, likesCount, description}))(user.avatar); 
return res.send({id, cellphone, fullname, gender, avatar}); 
0

这里是可以标准化的对象属性的函数:

function normalizeObjectKeys(obj) { 
    let normilizedObj = {}; 
    Object.keys(obj).map(key => { 
     let newKey = key.replace(/_+/, ''); 
     normilizedObj[newKey] = ('object' !== typeof obj[key]) ? obj[key] : normalizeObjectKeys(obj[key]); 
    }); 
    return normilizedObj; 
} 

例:

normalizeObjectKeys({ 
    "_id": "583c4e054c99d310f543b11e", 
    "cellphone": "123456", 
    "password": "$2a$10$d3SeD5CCzTo6wBR/4SGUu.i7vUvX98N1NlpBTwDdWCRrIYcVwWmCO", 
    "fullname": "some name", 
    "gender": "male", 
    "avatar": { 
    "_id": "583c4e054c99d310f543b11d", 
    "__v": 0, 
    "url": "https://pp.vk.me/c631525/v631525614/2b398/kbI5QohgEgQ.jpg", 
    "likesCount": 0, 
    "description": "Hey guys" 
    }, 
    "__v": 0 
});