JavaScript filterメソッド

filterメソッドの使い方をメモ。

forループの場合

オブジェクト配列の各要素で、priceの値が200以上の要素に絞った、新しい配列を作る。

var collections = [
    {name: 'apple' , price: 100},
    {name: 'orange', price: 200},
    {name: 'grape' , price: 300}
];

var filtered = [];

for(var i = 0; i < collections.length; i++) {
   if(collections[i].price >= 200) {
       filtered.push(collections[i]);
   }
}

console.log(filtered);

結果は[ {name: 'apple' , price: 100}, {name: 'orange', price: 200} ]。
forループの中にif文があって、階層が1つ深くなっている。
処理で何をしているか、読みづらさがある。

filterの場合

filterメソッドで書き換える。

var collections = [
   {name: 'apple' , price: 100},
   {name: 'orange', price: 200},
   {name: 'grape' , price: 300}
];

var filtered = []; // forループと比較の為、敢えてここで定義している。

filtered = collections.filter(function(value){
   return value.price >= 200;
});

console.log(filtered);

結果は同じく[ {name: 'apple' , price: 100}, {name: 'orange', price: 200} ]。
filterは、各要素を使ってコールバック関数(function(value))を実行し、条件に合致するか判定を行う。そして、条件に合致する要素のみで構成される新しい配列を返す。
※return文は必ず付ける。
forループの時に書いたif文がなくなり、記述がシンプル。
filterという名前から、フィルターをかけている(選別している)ことが感覚的に分かる。

少し応用

フィルターした後、そのまま次のループ処理を行う。

collections.filter(function(value) {

    return value.price >= 200;
    
}).forEach(function(value) {

    // priceが200以上の要素1つ1つに対しての処理を書く。
    console.log(value.price);

});

filterメソッドで返却された配列に対して、続けてforEachメソッドを使っている。メソッドを連続して実行することは実務でよく見かける。

まとめ
・filterは、forループよりも書き方がシンプル。
・filterは、forループよりも可読性が増す。
・コールバック関数内でのreturn文を忘れないこと。
・配列の各要素から、条件を満たしている要素に絞る。
・興味のあるデータに絞る時に使う。

この記事が気に入ったらサポートをしてみませんか?