.filter()
filter()メソッドは、提供された関数によって実装されるテストをパスした要素から成る新しい配列を作成します。
文法
arr.filter(callback[, thisArg])
引数 | 説明 |
---|---|
callback | 配列の各要素をテストする関数を指定します。 |
thisArg |
callback実行時に |
説明
filter
は、配列の各要素ごとに提供されたcallback
関数を呼び出し、
callback
がtrueの値を返した値による新しい配列を構成します。
callback
は値が割り当てられている配列のインデックスに対してのみ実行され、
削除、または値が割り当てられていないインデックスに対しては実行されません。
callback
のテストに渡されなかった配列の要素は単純にスキップされ、
新しい配列には含まれません。
callback
は3つの引数を使用して実行されます。
- 要素の値
- 要素のインデックス番号
- 巡っている配列のオブジェクト
もしthisArg
パラメーターがfilter
に提供されると、
callback
実行時に、そのthis
値として渡されます。
そうでなければ、undefined
の値がそのthis
値として渡されます。
callback
によって最終的に供給されるthis
値は、
関数によるthisの取り扱いの通常の規則に沿って決定されます。(翻訳に自信なし)
filter
は呼び出し元の配列を変更しません。
コールバックの最初の実行前に、filter
によって設定された要素の範囲が処理されます。
filter
が呼び出された後に追加された要素は、callback
の対象にはなりません。
もし配列内の要素が変更、または削除された場合は、
filter
がそれらの値を参照する時の値でcallback
に渡され、
削除された要素であれば、その渡す対象から外されます。
例
例: フィルタによる小さな値の除外
下記のサンプルはfilter
を使用して、
10未満の要素を削除してフィルタリングされた配列を作成します。
function isBigEnough(element) {
return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]
Polyfill
filter
は、5thエディションのECMA-262標準で追加されたため、
標準実装の全てに提供されていないかもしれません。
あなたのスクリプトが始まる前に下記のコードを挿入することで、
ネイティブでECMA-262実装のfilter
がサポートされない環境でも、filter
が使用可能になります。
このアルゴリズムは、5thエディションのECMA-262の正確な仕様の1つであり、
fun.callがFunction.prototype.callの元の値を評価するとみなし、
Array.prototype.pushがその元の値を持ちます。(翻訳に自信なし)
if (!Array.prototype.filter)
{
Array.prototype.filter = function(fun /*, thisArg */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var res = [];
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for (var i = 0; i < len; i++)
{
if (i in t)
{
var val = t[i];
//注意: 技術的な観点から、これは次のインデックスで、
// pushがObject.prototypeとArray.prototypeのプロパティによって
// 影響される可能性があるか、Object.definePropertyすべきです。
// ただし、メソッドのnewと衝突する事は稀であるため、
// 代わりにより互換性を広く取る事を選択しています。(翻訳に自信なし)
if (fun.call(thisArg, val, i, t))
res.push(val);
}
}
return res;
};
}
仕様
ブラウザ互換性
機能 | Chrome | Firefox (Gecko) |
IE | Opera | Safari |
---|---|---|---|---|---|
基本 | ◯ | 1.5 (1.8) | 9 | ◯ | ◯ |
機能 | Android | Chrome for Android |
Firefox Mobile |
IE Mobile |
Opera Mobile |
Safari Mobile |
---|---|---|---|---|---|---|
基本 | ◯ | ◯ | 1.0 (1.8) | ◯ | ◯ | ◯ |
関連項目
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。