【JavaScript】連想配列の重複データを削除する

今回は、JavaScript で連想配列の重複を削除する方法です。
例えば、名前が重複していたら、該当データを 1つだけ残して他の重複データは削除するという処理を行う方法です。

参考にさせていただいた記事はこちら。

配列の重複をはじく、もしくは重複を取り出す – Qiita
https://qiita.com/cocottejs/items/7afe6d5f27ee7c36c61f

その中の、下記のコードを参考にしました。

const array = [1,2,3,3,2,2,5];
const result = array.filter(function (x, i, self) {
  return self.indexOf(x) === i;
});

 

で、実装したコードはこちらです。

const array = [{ name: 'orange', price: 150 }, { name: 'apple', price: 160 }, { name: 'banana', price: 200 }, { name: 'apple', price: 160 }, { name: 'grape', price: 300 }, { name: 'orange', price: 150 }];

const result = array.filter((item, index, self) => {
  // name だけをリスト化する
  const nameList = self.map(item => item['name']);
  // 重複を削除する
  if (nameList.indexOf(item.name) === index) {
    return item;
  }
});

こちらのコードでは、name の項目が重複した場合、データを1つだけ残して他をすべて削除しています。
5行目で重複させたくない項目、今回は name のデータのみを取り出し、nameList という配列を新しく作成しています。
で、7行目でその配列を使って重複を削除しています。
上記の処理が完了したら、変数 result に結果が格納されているはずです!

なお、今回の処理で初めて知ったのですが、.filter() メソッドの第三引数で、このメソッドが実行されている配列を取得できるんですね。
リファレンスに書いてあるのですが、使ったことがなかったので知りませんでした…。

 

以上、連想配列の特定の項目が重複していた場合、該当データを削除する方法についてでした。
ご参考になれば幸いです

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG