まとめ
map
メソッドとは
filter()
は Array インスタンスのメソッドで、指定された配列の中から指定された関数で実装されているテストに合格した要素だけを抽出したシャローコピーを作成します。
※mdn web docs
つまり、filter
メソッドは、配列の各要素に対して指定した条件を満たすかどうかをチェックし、条件を満たす要素のみを含む新しい配列を返します。
目次
基本構文
配列numbers
の値をnum
としてコールバック関数num => num * 2
に渡し、新たな配列doubled numbers
として返している。
const numbers = [1, 3, 6, 8, 11];
const lucky = numbers.filter(function(number) {
return number > 7;
});
console.log(lucky);
//出力結果 [ 8, 11 ]
活用例1
filter
メソッド内に、if
文を書いてさらに細かく絞り込んでいます。
以下のコードは、値が偶数のものは除外し、その中で2以上の値だけを抽出しています。
const array = [1, 2, 3, 4, 5]
const newArray = array.filter(function(value) {
if (value % 2 === 0) {
return false
}
return value >= 2
})
console.log(newArray)
//出力結果 [3, 5]
活用例2
これはindexOf
を使用し配列に格納されている値のインデックス番号を取得しています。実行結果の左側はindexOf
メソッドが取得したインデックス番号であり、user2など同じ値がある場合インデックス番号は同じものとなります。
また実行結果の右側はfilter
メソッドが参照しているインデックス番号であり、重複したデータ(user2
やuser5
)だけfilter
メソッドが参照しているインデックス番号と同じではありません。そのためこのコードでは被っている値を見つけることができます。
const items = ["user1","user2","user2","user3","user4","user5","user5","user5","user5"];
const result = items.filter(function(value, index, array) {
console.log(array.indexOf(value) + ' : ' + index);
})
//出力結果
//0 : 0
//1 : 1
//1 : 2
//3 : 3
//4 : 4
//5 : 5
//5 : 6
//5 : 7
//5 : 8
解説
-
array.indexOf(value)
は、現在のvalue
が配列array
内で最初に出現するインデックスを返します。 -
index
は、現在のvalue
がfilter
メソッド内で処理されているインデックスを示します。
処理の流れ
-
value
が"user1"
のとき:-
array.indexOf("user1")
は0
を返します。 - 現在の
index
は0
です。 - 出力: 0 : 0
-
-
value
が"user2"
のとき(最初の"user2"
):-
array.indexOf("user2")
は1
を返します。 - 現在の
index
は1
です。 - 出力: 1 : 1
-
-
value
が"user2"
のとき(2回目の"user2"
):-
array.indexOf("user2")
は最初の"user2"
のインデックスである1
を返します。 - 現在の
index
は2
です。 - 出力: 1 : 2
-
-
value
が"user3"
のとき:-
array.indexOf("user3")
は3
を返します。 - 現在の
index
は3
です。 - 出力: 3 : 3
-