0
0

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

Posted at

課題

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

プロフィール・経歴

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0