JavaScriptで2つのオブジェクト配列を連結し、属性の重複データを削除する方法
2つのオブジェクト配列を連結し、特定の属性(例:productId)に基づいて重複データを削除・更新したい場合は、map()メソッドとfind()メソッドを組み合わせるのが効果的です。
基本的な考え方は、片方の配列をmap()で走査しながら、各要素と同じキーを持つオブジェクトをもう一方の配列からfind()で検索します。一致する要素が見つかればその値で上書きし、見つからなければ元のオブジェクトをそのまま返します。
サンプルコード
var details1 =
[
{
productDetails:
{
isSold: true,
productId:101
}
},
{
productDetails:
{
isSold: true,
productId:103
}
}
]
var details2 =
[
{
productDetails:
{
isSold: false,
productId:101
}
}
]
var details3 = details1.map(details1Object=>{
var newObject= details2.find(obj=>obj.productDetails.productId
=== details1Object.productDetails.productId)
return newObject? newObject : details1Object
})
console.log(details3)
処理の流れ
details1に対してmap()を実行し、各要素を順番に処理します。find()を使って、details2の中から同じproductIdを持つ要素を検索します。- 一致する要素が存在すればその要素(新しいデータ)を返し、存在しなければ元の
details1の要素をそのまま返します。 - この例では、productId「101」が
details2側のisSold: falseのデータで置き換えられ、重複が解消されます。
プログラムの実行方法
上記のプログラムを実行するには、次のコマンドを使用します。
node fileName.js
ここでは、ファイル名を demo183.js としています。
出力結果
プログラムを実行すると、以下のような出力が得られます。
PS C:\Users\Amit\javascript-code> node demo183.js
[
{ productDetails: { isSold: false, productId: 101 } },
{ productDetails: { isSold: true, productId: 103 } }
]
このように、map()とfind()を組み合わせることで、2つの配列を効率的にマージしながら、指定した属性の重複を排除できます。なお、配列のサイズが大きい場合は、Mapオブジェクトやreduce()を使った実装の方がパフォーマンス面で有利になる場合があります。
-
JavaScriptでサブオブジェクトや配列を含むオブジェクトをインポートする方法
はじめに JavaScriptでは、ESモジュール(import / export)の仕組みを利用することで、別ファイルに定義したオブジェクトを簡単に読み込めます。オブジェクトの中にサブオブジェクト(ネストされたオブジェクト)や配列が含まれていても、そのままインポートして扱うことができます。以下に具体的なコード例を示します。 コード例 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta na
-
JavaScriptでXMLデータから属性の値を取得する方法
JavaScriptでXMLデータから属性の値を取得するには、attr()メソッドを使用します。このメソッドは、指定した属性名に対応する値を簡単に取り出すことができる便利な機能です。 attr()メソッドとは attr()はjQueryが提供するメソッドの一つで、XMLやHTML要素から指定した属性の値を取得できます。XMLデータをjQueryオブジェクトとして扱うことで、DOM操作と同じ感覚で属性へアクセスできるのが特徴です。 サンプルコード 以下のコードでは、ゲーム情報を含むXMLデータから「details」属性の値を取得しています。 <!DOCTYPE html> <h