如何正确地分配对象属性是JS
问题描述:
我有以下对象:如何正确地分配对象属性是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改进我的代码?
答
更好更明确一些,以保持其性能,而不是指定哪些应该被删除。而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});
答
这里是可以标准化的对象属性的函数:
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
});
'{。 ..user.toObject(),}'是无效的ES6。 –