移动和删除 Sequelize 查询返回的 JS 对象中的键?
Moving and deleting keys in JS object returned by Sequelize query?
我有一个数据库查询 returns 我有一个格式如下的数组:
[
{ 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)));
不幸的是,这似乎不起作用,不知道为什么:
好的,对于那些可能偶然发现这个的感兴趣的人:
正如我所说,我从 Seqelize ORM 获得的分数作为数据库结果。这显然不是一个简单的 Javascript 对象,所以对于每个分数我都必须做这个技巧:
scores[i] = JSON.parse(JSON.stringify(scores[i]));
编辑:
Sequelize 从查询返回的对象也包含模型的所有内部信息。要使用性能更友好的方法摆脱它,请使用 get with 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;
}
我建议您将需要的内容复制到新对象中:
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
是数组中的项目数,m
是您要复制的键数。
scores[i].User = undefined
这将清除您的数据。
我有一个数据库查询 returns 我有一个格式如下的数组:
[
{ 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)));
不幸的是,这似乎不起作用,不知道为什么:
好的,对于那些可能偶然发现这个的感兴趣的人:
正如我所说,我从 Seqelize ORM 获得的分数作为数据库结果。这显然不是一个简单的 Javascript 对象,所以对于每个分数我都必须做这个技巧:
scores[i] = JSON.parse(JSON.stringify(scores[i]));
编辑:
Sequelize 从查询返回的对象也包含模型的所有内部信息。要使用性能更友好的方法摆脱它,请使用 get with 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;
}
我建议您将需要的内容复制到新对象中:
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
是数组中的项目数,m
是您要复制的键数。
scores[i].User = undefined
这将清除您的数据。