JavaScriptでオブジェクトの配列をフィルタリングする

JavaScriptでオブジェクトの配列(普通の配列でもOK)に対し、あるプロパティの値をキーとして、条件を満たす要素のみを抽出したいときは、array.filter() メソッドを使う。(ソートしたい場合は、ここを参照。)

例えば、以下のような配列があるとする。

// JavaScript
gLines = [
{
  ln_file: "T1301451.json"
  ln_key: "1301451"
  ln_name: "[JR]岩泉線 (茂市~岩泉) "
},
{
  ln_file: "T1301541.json"
  ln_key: "1301541"
  ln_name: "[JR]北上線 (北上~横手) "
},
{
  ln_file: "T1301671.json"
  ln_key: "1301671"
  ln_name: "[JR]磐越東線(ゆうゆうあぶくまライン) (いわき~郡山) "
}];

この配列から、
ln_key が ’1301541′に等しい要素を抽出するには、次のようにする。

// JavaScript
var newLine = gLines.filter(function(item, index){
  if (item.ln_key == '1301541') return true;
});

また、ln_name に「いわき」という文字を含む要素を取り出すには、

// JavaScript
var newLines = gLines.filter(function(item, index){
  if ((item.ln_name).indexOf('いわき') >= 0) return true;
});

とすればOK。

書式:array.filter(callbackfn)
array内の各要素に対し、関数:callbackfn()が1回適用され、「この関数がtrueを返す要素」を集めて新しい配列を作成する。上記の例では、gLines[0], gLines[1], …が順にテストされ、条件(ln_key == ‘…’など)を満たす要素 gLines[1] が抽出される。
callbackfn()のパラメータは最大3つで、最初が(元の)配列の要素(item)、次が要素のインデックス(index)になっている。

カテゴリー: Tips タグ: パーマリンク