多次元配列を重複しない形で結合したいです
二つの配列オブジェクトを重複しない形でマージしたいです。
Express.jsでデータ加工しております。
マージする処理環境はExpress.jsでの処理と考えていますが、フロントのVue.js環境でもよければと思い、
jsファイルでexportしております。
配列の内容ですが、userData.jsでは、氏名やグループのデータと受け持ったタスク名等を重複しない形で持っています。
Reduce等で作成してきました。
tasks.jsではユーザーが受け持ったタスクの実績をオーダーコードごとにもっています。
最終的に一つの配列オブジェクトにしたいのですが、ユーザーごとに重複しないデータをもちつつ、重複する実績データをもつにはどのようにすればよいでしょうか。
試したことはuser_idが一致するならマージするといったやり方で、一方の配列はmap関数処理内でスプレッド構文で展開し、その中で、もう片方の配列をmapにかけuser_id同士が一致するといった処理をfindでみつけると方法です。
このやりかたではデータを落としてしまいます。
また、reduce関数でprev[tasks] = (prev[tasks] || []).concat({ object })でvalueごとにまとめて、Object.entriesでkey,valuesとして処理するといったことを試しました。
お分かりになる方がいらしゃったらご協力おねがい致します。
以下コードです
javascript
1// userData.js 2 3export default 4 [ 5 { // user_id: 1 6 user_id: 1, 7 order_name: [ 8 "AA作業", 9 "BB作業" 10 ], 11 users: { 12 user_id: 1, 13 group_name: "teamA", 14 user_full_name: "DoAsInfinity" 15 }, 16 order_code: { 17 user_id: 1, 18 order_code: [ 19 "110", 20 "111" 21 ] 22 } 23 }, 24 { // user_id: 2 25 user_id: 2, 26 order_name: [ 27 "AA作業" 28 ], 29 users: { 30 user_id: 2, 31 group_name: "teamA", 32 user_full_name: "ezDoDance" 33 }, 34 order_code: { 35 user_id: 2, 36 order_code: [ 37 "110" 38 ] 39 }, 40 }, 41 { // user_id: 3 42 user_id: 3, 43 order_name: [ 44 "CC開発" 45 ], 46 users: { 47 user_id: 3, 48 group_name: "teamB", 49 user_full_name: "GetWild" 50 }, 51 order_code: { 52 user_id: 3, 53 order_code: [ 54 "111", 55 "112" 56 ] 57 } 58 } 59 ] 60
javascript
1// tasks.js 2export default 3 [ 4 [ // 同一 user_id 5 [ // 同一order_code: 110 6 { 7 input_time: 4, 8 count: 1, 9 user_id: 1, 10 user_full_name: 'DoAsInfinity', 11 section_name: "z事業部", 12 order_code: "110", 13 daily_day: "2021-01-04" 14 }, 15 { 16 input_time: 7, 17 count: 1, 18 user_id: 1, 19 user_full_name: 'DoAsInfinity', 20 section_name: "z事業部", 21 order_code: "110", 22 daily_day: "2021-01-15" 23 } 24 ], 25 [ // 同一order_code: 111 26 { 27 input_time: 1, 28 count: 1, 29 user_id: 1, 30 user_full_name: 'DoAsInfinity', 31 section_name: "z事業部", 32 order_code: "111", 33 daily_day: "2021-01-04" 34 }, 35 { 36 input_time: 5, 37 count: 1, 38 user_id: 1, 39 user_full_name: 'DoAsInfinity', 40 section_name: "z事業部", 41 order_code: "111", 42 daily_day: "2021-01-05" 43 } 44 ] 45 ], 46 [ // 同一 user_id 47 [ // 同一 order_code 48 { 49 input_time: 8, 50 count: 1, 51 user_id: 2, 52 user_full_name: "ezDoDance", 53 section_name: "Z事業部", 54 order_code: "110", 55 daily_day: "2021-01-04" 56 }, 57 { 58 input_time: 8, 59 count: 1, 60 user_id: 2, 61 user_full_name: "ezDoDance", 62 section_name: "Z事業部", 63 order_code: "110", 64 daily_day: "2021-01-05" 65 }, 66 { 67 input_time: 8, 68 count: 1, 69 user_id: 2, 70 user_full_name: "ezDoDance", 71 section_name: "Z事業部", 72 order_code: "110", 73 daily_day: "2021-01-06" 74 } 75 ] 76 ], 77 [ // 同一 user_id 78 [ // 同一 order_code 79 { 80 input_time: 4, 81 count: 2, 82 user_id: 3, 83 user_full_name: "GetWild", 84 section_name: "Z事業部", 85 order_code: "111", 86 daily_day: "2021-01-04" 87 }, 88 { 89 input_time: 2, 90 count: 1, 91 user_id: 3, 92 user_full_name: "GetWild", 93 section_name: "Z事業部", 94 order_code: "111", 95 daily_day: "2021-01-07" 96 }, 97 { 98 input_time: 3, 99 count: 2, 100 user_id: 3, 101 user_full_name: "GetWild", 102 section_name: "Z事業部", 103 order_code: "111", 104 daily_day: "2021-01-13" 105 } 106 ], 107 [ 108 { 109 input_time: 2.5, 110 count: 2, 111 user_id: 3, 112 user_full_name: "GetWild", 113 section_name: "Z事業部", 114 order_code: "112", 115 daily_day: "2021-01-04" 116 } 117 ] 118 ] 119 ] 120
あなたの回答
tips
プレビュー