JavaScript - 配列で、重複した要素を削除する filter()
JavaScriptの配列で、重複した値が入っている要素を削除する方法を紹介します。
filter() メソッドと indexOf() メソッドを使うと、重複除去が簡単にできます。
重複した要素を削除するサンプルコード
次のコードは、filter() メソッドと indexOf() メソッドを使って、 重複要素を削除しています。
"b"と"c"の重複している分が、取り除かれているのがわかります。
var arr = ["a", "b", "b", "c", "c", "c"];
var new_arr = arr.filter(function(val, i, self){
return i === self.indexOf(val);
});
console.log(new_arr); // Array [ "a", "b", "c" ]
filter() メソッドの概要
filter() メソッドは、配列の各要素に対して、引数として与えられたテスト関数を実行します。
そして、テストに合格した要素から成る、新しい配列を生成します。
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.filter(function(x){return x >= 3;});
console.log(arr2); // Array [ 3, 4, 5 ]
indexOf() メソッドの概要
indexOf() メソッドは、指定した値を配列中から検索し、 最初に見つかったインデックスを返します。
見つからなかった場合は -1 を返します。
console.log([1,2,3].indexOf(3)); // 2
console.log([1,2,3].indexOf(5)); // -1
重複データを除去するプロセス
filter() メソッドと、indexOf() メソッドの概要を押えた上で、 もう一度サンプルコードを見てみます。
var arr = ["a", "b", "b", "c", "c", "c"];
var new_arr = arr.filter(function(val, i, self){
return i === self.indexOf(val);
});
console.log(new_arr); // Array [ "a", "b", "c" ]
下の表は、「i」、「val」、「self.indexOf(val)」、「i === self.indexOf(val)」の値の対応表です。
この表を見ると、「i」と「self.indexOf(val)」が同じ場合にデータが抽出され、 それ以外は削除されることがわかります。
i | val | self.indexOf(val) | i === self.indexOf(val) | 抽出するかどうか |
---|---|---|---|---|
0 | a | 0 | true | ○ |
1 | b | 1 | true | ○ |
2 | b | 1 | false | |
3 | c | 3 | true | ○ |
4 | c | 3 | false | |
5 | c | 3 | false |