javascript - SQL 右连接到 JSON/数组

标签 javascript mysql arrays json node.js

我正在尝试将来自 MySql right join 的行数组转换为 nodeJS 上的 array/json 格式。考虑通用的 mysql 表:

emp_id  name
1       john
2       bill
3       anna


fk_emp_id   project
1           p1
1           p2
1           p3
2           p1
2           p4

以及它们的右连接:

id  name fk_emp_id  project
1   john    1       p1
1   john    1       p2
1   john    1       p3
2   bill    2       p1
2   bill    2       p4
3   anna    3       null

这是:

rows = [
    {"id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p1"},
    {"id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p2"},
    {"id":1, "name":"john", "fk_emp_id" : "1" , "project" : "p3"},
    {"id":2, "name":"bill", "fk_emp_id" : "2" , "project" : "p1"},
    {"id":2, "name":"bill", "fk_emp_id" : "2" , "project" : "p4"},
    {"id":3, "name":"anna", "fk_emp_id" : "3" , "project" : null}
]

我如何将它们转换成这个 JSON:

result = [
    {id: '1',
     name: 'john',
     projects: [p1, p2, p3]
    }
    ,
    {id: '2',
     name: 'bill',
     projects: [p1, p4]
    }
    ,
    {id: '3',
     name: 'anna',
     projects: []
    }
]

最佳答案

如果您只寻找将 转换为结果 数组的版本,那么您可以使用Map。作为给定 id 引用的哈希表。

var rows = [{ id: 1, name: "john", fk_emp_id: "1", project: "p1" }, { id: 1, name: "john", fk_emp_id: "1", project: "p2" }, { id: 1, name: "john", fk_emp_id: "1", project: "p3" }, { id: 2, name: "bill", fk_emp_id: "2", project: "p1" }, { id: 2, name: "bill", fk_emp_id: "2", project: "p4" }, { id: 3, name: "anna", fk_emp_id: "3", project: null }],
    result = [];

rows.forEach(function (a) {
    var reference = this.get(a.id);
    if (!reference) {
        reference = { id: a.id, name: a.name, fk_emp_id: a.fk_emp_id, projects: [] };
        this.set(a.id, reference);
        result.push(reference);
    }
    a.project && reference.projects.push(a.project);
}, new Map);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - SQL 右连接到 JSON/数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39577547/

相关文章:

javascript - 如何通过多个属性对 javascript 对象数组进行分组?

mysql - Revenue = 0 的行,如何显示 0?

c++ - 递归调用以获取带有前缀或后缀参数的 arr 元素的总和

javascript - 从数组中获取对象名称并创建无序列表

javascript - 类型错误 : Cannot read property 'url' of undefined

mysql - mysql中的聚合列是什么?

php - 将 MySQL 过程与函数一起使用

javascript - setTimeout() 函数的 TypeScript 装饰器

javascript - 如何在 chrome 扩展程序中制作私有(private)文件?

javascript - jQuery .text() 方法重复自身。如何让它只运行一次?