課題
2個の配列同士で、オブジェクトの値が1個でも違うものがれば、その差分を検出したい
対策
-
JSON.stringify
でオブジェクトを丸ごと比較する
コード例
それぞれ名前・年齢を持つオブジェクトの配列を比較する
// 配列Aと配列B
const arrayA = [
{ first_name: 'Alice', age: 20 }, // 両方の配列に存在する要素
{ first_name: 'Alice', age: 30 }, // 両方の配列に存在する要素
{ first_name: 'Bob', age: 30 }, // 片方の配列にしか存在しない要素
]
const arrayB = [
{ first_name: 'Alice', age: 20 }, // 両方の配列に存在する要素
{ first_name: 'Alice', age: 30 }, // 両方の配列に存在する要素
{ first_name: 'Alice', age: 40 }, // 片方の配列にしか存在しない要素
{ first_name: 'Carol', age: 20 }, // 片方の配列にしか存在しない要素
]
const findDifferences = (array1, array2) => {
// array1にあってarray2にないものを見つける
const onlyInArray1 = array1.filter((obj1) => !array2.some((obj2) => JSON.stringify(obj2) === JSON.stringify(obj1)))
// array2にあってarray1にないものを見つける
const onlyInArray2 = array2.filter((obj2) => !array1.some((obj1) => JSON.stringify(obj1) === JSON.stringify(obj2)))
// 差分を結合
return [...onlyInArray1, ...onlyInArray2]
}
// 差分を見つける
const differences = findDifferences(arrayA, arrayB)
console.log(differences)
出力結果
- 同じ名前、なおかつ同じ年齢の要素は検出されない
- 名前か年齢か、その両方が違う要素が検出される
[
{ first_name: 'Bob', age: 30 },
{ first_name: 'Alice', age: 40 },
{ first_name: 'Carol', age: 20 }
]
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
プロフィール・経歴