移动和删除Sequelize查询返回的JS对象中的键?

时间:2016-07-17 12:22:16

标签: javascript arrays javascript-objects

我有一个数据库查询,它返回一个格式如下的数组:

[
    { 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)));

遗憾的是,这似乎不起作用,不确定原因:

code result

3 个答案:

答案 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是您要复制的键数。