javascript - 根据主键和外键组合两个数组

标签 javascript node.js arrays mongodb merge

我有两个这样的数组:

let event = [
              {id: "123", ename: "abc"}
              {id: "125", ename: "def"}
            ]
let speaker = [
               {id: "11", sname: "s1", event_id: "123"}, //FK from event table
               {id: "13", sname: "s2", event_id: "123"}, 
               {id: "15", name: "s4", event_id: "125"}
            ]

我想要这样的输出:

let event_speaker = [
                       {
                         id: "123", 
                         ename: "abc", 
                         speaker: [
                             {id: "11", sname: "s1", event_id: "123"},
                             {id: "13", sname: "s2", event_id: "123"}, 
                         ]
                       },
                       {
                         id: "125", 
                         ename: "def", 
                         speaker: [
                             {id: "15", sname: "s4", event_id: "125"} 
                         ]
                       }
                   ]

我尝试了不同的答案,这些答案可以将两个数组合并为一个,但当我们有多个匹配对并且我需要用我自己的 key (扬声器)将其放入一个新数组时则不行。

我已经尝试过这个:

let arr3 = arr1.map((item, i) => Object.assign({}, item, arr2[i]));

但它只适用于一个扬声器,因为它将所有扬声器键放入最终数组中,如下所示

let final_array = [
     id: "123",
     ename: "abc,
    sname: "s1",
    event_id: "123"

]

最佳答案

您可以使用mapfilter方法来做到这一点。您只需使用 event 中当前元素的 id 过滤 speaker 数组即可。

let event = [{"id":"123","ename":"abc"},{"id":"125","ename":"def"}]
let speaker = [{"id":"11","sname":"s1","event_id":"123"},{"id":"13","sname":"s2","event_id":"123"},{"id":"15","name":"s4","event_id":"125"}]

const event_speaker = event.map(({ id, ...rest }) => ({
  id, ...rest, speaker: speaker.filter(({ event_id }) => event_id === id)
}))

console.log(event_speaker)

关于javascript - 根据主键和外键组合两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65078313/

相关文章:

javascript - 如何在 NodeJs 中更改 package.json 中的主文件

c - C语言中如何将数组清空?

javascript - 分配一个变量以及用另一个数组的项目迭代for循环

javascript - 如何使用casperJS获取新页面的URL

javascript - 如何添加固定导航栏切换动画

javascript - Google Drive Upload API - 包含 0 个 MIME 部分的无效多部分请求

javascript - 在 Node.js 中传播错误回调并避免所有额外的麻烦?

javascript - mongoose remove 不会删除所有文档

arrays - 根据条件切片二维 numpy 数组

javascript - Notepad++ 模板崩溃问题