MENU

【Javascript基礎】mapメソッドとfilterメソッドについて

今回は、mapメソッドとfilterメソッドについて。
ちょうど、配列を使って、検索機能を実装しないといけなくなり、filterを使うとよさそうなことを聞き、急いで調べました。

CONTENTS

完成ソース

従来の配列の仕方とmapメソッド、filterメソッドを使用した方法の2パターンで記述しています。

See the Pen map&filter method by komame (@komame) on CodePen.

mapメソッドとfilterメソッドについて

配列を出力するだけなら、for文やforEach文でも問題なさそうですが、このmapメソッドは呼び出して処理した配列を新しく生成することができます!

ですので、処理をした配列を別の処理で使用したい場合に、使えるメソッドのようです。

実際のソースを見てみましょう。

まずは、従来の配列の記述はこちら。配列の数をループして、出力。そして、newArrayという配列の変数にpushする必要があります。

for(let i=0; i < array.length; i++){
  const val = array[i] * 2;
  arrayText.innerHTML += val;
  
  if(val > 50){
    // 配列に追加する
    newArray.push(array[i] * 2)
  }
}

こちらが、mapメソッドとfilterメソッドを記述して、同じ処理をしてみました。

たったの一行で、できるんですね!一緒にすると、複雑にみえるので、これを別々に記述してみます。

const newArray4 = array.map(val => val * 2).filter(val => val > 50);

mapメソッド

まず、mapメソッドの構文は、下記。

配列.map([要素],[インデックス],[元配列])=> 変更後の要素

map() メソッドは、与えられた関数を配列のすべての要素に対して呼び出し、その結果からなる新しい配列を生成します

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map

実際の記述はこちら。

// mapメソッドを使って、配列を出力する書き方。
const newArray2 = array.map( (val, i, array) => {
  // console.log(val);
  // console.log(val,i);
  // console.log(array);
  return val * 2;
});

ちなみに、arrayは配列が下記になります。

const array = [10, 20, 30, 40];

ですので、console.logで出力されるのは、valがそれぞれの配列の要素となり、10、20、30が順に出力されます。

iはインデックスですので、添字が出力されます。

arrayは、元になる配列なので、上記のarrayが出力されます。

そして、コールバックで、それぞれの値に2倍をして、newArray2に、新しい配列が出力されます。

20,40,60,80

今回は、単純に2倍の値を返しているだけですが、もっと複雑な処理をして、新しく配列を出力したいときに、使えます。

filterメソッド

filterメソッドは、ある配列から条件を満たす、別の配列を作りたいときに、使います。構文は、下記。

配列.filter([要素],[インデックス],[元配列]) => 真偽値

実際の記述はこちら。newArray2というのは、先ほどのmapメソッドで2倍にした配列ですね。

const newArray3 = newArray2.filter(val => val > 50);
20,40,60,80

ですので、上記の中から、50以上のものを配列として出力するので、60,80の配列がnewArray3に格納されます。

文章でみても、わかりづらいと思うので、完成コードを見たほうがいいかもしれません。

いろいろと記述しましたが、下記の記事のほうが分かりやすいかもです。

侍エンジニアブログ
【JavaScript入門】配列処理をするmap()の使い方とMapオブジェクトの解説! | 侍エンジニアブログ この記事では「 【JavaScript入門】配列処理をするmap()の使い方とMapオブジェクトの解説! 」といった内容について、誰でも理解できるように解説します。この記事を読めば...

まとめ

正直なところ、mapとfilterの使い分けがまだよくわかっていません。。。現在、検索機能を実装しているので、filterのほうがよく使っている印象です。

いろいろ記述してみて、違いがわかったら、また追記しようと思います。

map/filterメソッドについて

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
CONTENTS