今回は、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()
メソッドの第三引数で、このメソッドが実行されている配列を取得できるんですね。
リファレンスに書いてあるのですが、使ったことがなかったので知りませんでした…。
以上、連想配列の特定の項目が重複していた場合、該当データを削除する方法についてでした。
ご参考になれば幸いです