组合主键和外键上的两个数组



我有两个这样的数组:

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"
]

您可以使用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)

您也可以使用对象破坏:

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)

最新更新