将RowDataPacket记录合并为一个并返回JSON

时间:2018-02-06 07:23:03

标签: mysql json node.js

我的查询返回的内容类似于:

[ RowDataPacket { username: 'mario', content: 'foo', quantity: 4 },
  RowDataPacket { username: 'mario', content: 'bar', quantity: 6 },
  RowDataPacket { username: 'mario', content: 'fizz', quantity: 4 } ]

我想合并所有RowDataPacket并返回

{
    mario: {
        foo: 4,
        bar: 4,
        fizz: 4
    }
}

如何转换记录?

1 个答案:

答案 0 :(得分:2)

Array.prototype.reduce()是你的朋友。

这样的事情可以解决问题:

const rows = [
  { username: 'mario', content: 'foo', quantity: 4 },
  { username: 'mario', content: 'bar', quantity: 6 },
  { username: 'mario', content: 'fizz', quantity: 4 }
];

const response = rows.reduce((acc, row) => Object.assign(acc, { [row.username]: Object.assign({ [row.content]: row.quantity }, acc[row.username] || { }) }), { });

对于一个班轮来说有点神秘,所以你可能想要扩展它。