为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容森 2023-09-21 17:33:10
我有两个这样的数组: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"}                          ]                       }                   ]我尝试了不同的答案,这些答案可以将两个数组合并为一个,但当我们有多个匹配对并且我需要用我自己的密钥(扬声器)将其放入一个新数组时,则不行。我已经尝试过这个:let arr3 = arr1.map((item, i) => Object.assign({}, item, arr2[i]));但它只适用于一个扬声器,因为它将所有扬声器键放入最终数组中,如下所示let final_array = [     id: "123",     ename: "abc,    sname: "s1",    event_id: "123"]
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

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


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)


查看完整回答
反对 回复 2023-09-21
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您也可以使用对象破坏:


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 result = event.map(e => ({...e,speaker: speaker.filter(({event_id}) => event_id === e.id)}))


console.log(result)


查看完整回答
反对 回复 2023-09-21
  • 2 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信