簡體   English   中英

在主鍵和外鍵上組合兩個 arrays

[英]Combine two arrays on primary key and foreign key

我有兩個像這樣的 arrays :

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

我想要這樣的 output :

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

我嘗試了不同的答案,這些答案可以將兩個 arrays 合並為一個,但當我們有多個匹配對並且我需要用我自己的密鑰(揚聲器)將它放入一個新數組時則不行。

我試過這個:

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)

您也可以使用 object 進行破壞:

 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM