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