我有一个数据库查询,它返回一个格式如下的数组:
[
{ score: 1, User: { username: 'user111' } },
{ score: 2, User: { username: 'user222' } }
]
我想将每个得分的User.username移动到只是用户名。这就是我正在做的事情:
console.log(JSON.parse(JSON.stringify(scores)));
for (var i = 0, len = scores.length; i < len; i++) {
scores[i].username = scores[i].User.username;
delete scores[i].User;
}
console.log("------------------");
console.log(JSON.parse(JSON.stringify(scores)));
遗憾的是,这似乎不起作用,不确定原因:
答案 0 :(得分:0)
scores[i].User = undefined
这将清除您的数据。
答案 1 :(得分:-1)
对于那些可能偶然发现此事的人:
正如我所说,我从Seqelize ORM获得了数据结果。这显然不是一个简单的Javascript对象,所以对于每个分数我都必须做这个技巧:
scores[i] = JSON.parse(JSON.stringify(scores[i]));
编辑:
Sequelize从查询中返回的对象也包含所有模型的内部信息。要使用更加性能友好的方法摆脱它,请使用plain:true选项(Sequelize 3.x)。这是完整的解决方案:
for (var i = 0, len = scores.length; i < len; i++) {
scores[i] = scores[i].get({ plain: true });
scores[i].username = scores[i].User.username;
delete scores[i].User;
}
答案 2 :(得分:-1)
我建议你复制新对象所需的内容:
npm install openfin-launcher@1.3.3
这假设所有分数具有相同的密钥,但性能应该不差。其const keys = Object.keys(scores[0]).filter(key => key != 'User');
scores = scores.map(score => {
const res = {};
keys.forEach(key => {
res[key] = score[key];
});
res.username = score.User.username;
return res;
});
其中O(n*m)
是数组中的项目数,n
是您要复制的键数。