LoginSignup
5
3

More than 5 years have passed since last update.

【JavaScript】【for文駆逐作戦】filterメソッドの使い方

Last updated at Posted at 2019-01-16

この記事の内容

  • javaScriptの「filter」の使い方について
  • for文は駆逐していく方針

なぜ駆逐するのか

  • 読みづらいし、ナウくないから。
  • 単純にfilterって書かれてたら、「フィルタかけてんだな」って他の人が気付きやすい(可読性UP↑)

さっそく書き方

いつもの「for文」


var products = [
  {name: 'PS4', type: 'SONY', quantity: 1, price:30000},
  {name: 'Switch', type: 'NINTENDO', quantity: 1, price:32000},
  {name: 'DreamCast', type: 'SEGA', quantity: 1, price:40000},
  {name: 'ゲームボーイカラー', type: 'NINTENDO', quantity: 2, price:42000},
];

var resultProducts = [];

  for (var i = 0;  i < products.length;  i++ ) {
    if (products[i].type === 'NINTENDO') {
      resultProducts.push(products[i]);
    }
  }
console.log(resultProducts);
//[{name: 'Switch', type: 'NINTENDO', quantity: 1, price:32000},{name: 'ゲームボーイカラー', type: 'NINTENDO', quantity: 2, price:42000}]


  • for文の中でif文で条件判定し、空の配列に格納している
  • ↑ってみると本当はただフィルタリングしたいだけなのに、、大層なことやってるでって感じがする😇

最新の「filter文」


var products = [
  {name: 'PS4', type: 'SONY', quantity: 1, price:30000},
  {name: 'Switch', type: 'NINTENDO', quantity: 1, price:32000},
  {name: 'DreamCast', type: 'SEGA', quantity: 1, price:40000},
  {name: 'ゲームボーイカラー', type: 'NINTENDO', quantity: 2, price:42000},
];

// typeがNINTENDOでpriceが40000以上のものをフィルターしたい!

var result = products.filter(function(product){
  return product.type === 'NINTENDO' &&
    product.price > 40000;
});

console.log(result); 
//  {name: 'ゲームボーイカラー', type: 'NINTENDO', quantity: 2, price:42000}

補足 (filterの特徴)

  • コールバック関数の戻り値は、「true」か「false」を返す
  • 「true」だった場合、要素が配列に入る!(フィルタリングしてる)
  • そもそも「return」を忘れてはいけない

まとめ

  • もはやfor文で表現する方が面倒臭くなってきた
  • 役割によって、メソッドを使い分けた方が断然いい気がしてきました。
  • そしてプロパティの取り出しを自由自在にすることが、真のJavaScripterになるということと悟りました。
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3