実現したいこと
Node,jsを使ったシステムの改修作業を担当することになりました。
大まかな流れは以下になります。
- object_id をキーにして、DBに登録されているjson1を取り出す
- 共通のobject_idを持ち、object_dataの中身が違うjson2があるので、json1に追記したい
例)
json1
1{ object_id: '1', 2 object_data: 3 [ { data_id: '1', 4 data_type: 'A' 5 enabled: true } ], 6 created_at: '2021-03-25', 7 created_by: '太郎' } 8
json2
1{ object_id: '1', 2 object_data: 3 [ { data_id: '2', 4 data_type: 'B' 5 enabled: true } ], 6 created_at: '2021-03-25', 7 created_by: '太郎' } 8
↓ 期待する実行結果
json1
1{ object_id: '1', 2 object_data: 3 [ { data_id: '1', 4 data_type: 'A' 5 enabled: true }, 6 { data_id: '2', 7 data_type: 'B' 8 enabled: true } 9 ], 10 created_at: '2021-03-25', 11 created_by: '太郎', 12 updated_at: '2021-03-26', 13 updated_by: '次郎' } 14
現状のプログラム
現状の仕様は、json1が持つobject_dataは1つのオブジェクトしか無い前提なので、
中身の違うデータが送られてくると、上書きされるようになっています。
しかし、今回の改修で、複数のオブジェクトを持つようにしたいということで今回の質問をしました。
Object.assign(json1, json2);
↓ 実行
json1
1{ object_id: '1', 2 object_data: 3 [ { data_id: '2', ←json2のデータで上書きされる 4 data_type: 'B' 5 enabled: true } 6 ], 7 created_at: '2021-03-25', 8 created_by: '太郎', 9 updated_at: '2021-03-26', 10 updated_by: '次郎' } 11
試したこと
同じデータが送られた時はこれまで通りで、違うデータが来た時にjson1に追加
javascript
1 const aJSON = JSON.stringify(json1.object_data); 2 const bJSON = JSON.stringify(json2.object_data); 3 if (aJSON === bJSON){ 4 Object.assign(json1, json2); 5 } else { 6 json1.object_data.push(json2.object_data); 7 }
↓ 実行結果
json1
1{ object_id: '1', 2 object_data: 3 [ { data_id: '1', 4 data_type: 'A' 5 enabled: true }, 6 [{ data_id: '2', 7 data_type: 'B' 8 enabled: true } ] 9 ] 10 ], 11 created_at: '2021-03-25', 12 created_by: '太郎', 13 updated_at: '2021-03-26', 14 updated_by: '次郎' } 15
このように、配列の中にさらに配列が追加されるという形で出力されてしまいます。
もう一点問題なのは、aJSON === bJSONとしたとき、
例えば期待通り以下の状態のデータが保持できているとき
object_data: [ { data_id: '1', data_type: 'A' enabled: true }, { data_id: '2', data_type: 'B' enabled: true } ],
json3として以下のデータが来た時に、aJSON !== bJSONとなってしまう点です。
object_data: [ { data_id: '1', data_type: 'A' enabled: true } ],
json1に含まれていないdata_idが来た時だけ、連結するという動きにする必要があります。
mapやreduceを使えば解決できるのかもしれないのですが、
実務未経験で初めてjavascriptを触っている状態なので、qiitaなどを参考にしても理解が追い付いていません。
ご教授、お願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/26 06:24
2021/03/26 07:18