🖥

Javascript - オブジェクトの配列を同士を比較する ( JSON.stringfy ) ( 3人のアリス )

に公開

課題

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オープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

プロフィール・経歴

https://github.com/YumaInaura/YumaInaura

公開日時

2024-09-02

https://qiita.com/YumaInaura/items/d450362b1bafc2d65372

Discussion