配列.filter() / find() / findIndex() 対応: ES5(ECMAScript 2009)
配列の中から条件に一致する要素を抽出・検索するメソッドです。『filter()』は条件を満たすすべての要素を、『find()』は最初の1つだけを返します。
構文
// 条件に一致するすべての要素を抽出します。
var result = 配列.filter(function(要素, インデックス, 配列) {
return 条件式;
});
// 条件に一致する最初の要素を返します。
var item = 配列.find(function(要素, インデックス, 配列) {
return 条件式;
});
// 条件に一致する最初の要素のインデックスを返します。
var index = 配列.findIndex(function(要素, インデックス, 配列) {
return 条件式;
});
メソッド一覧
| メソッド | 概要 |
|---|---|
| filter(関数) | 条件に一致するすべての要素を含む新しい配列を返します。一致する要素がない場合は空の配列を返します。 |
| find(関数) | 条件に一致する最初の要素を返します。見つからない場合は『undefined』を返します。 |
| findIndex(関数) | 条件に一致する最初の要素のインデックスを返します。見つからない場合は『-1』を返します。 |
サンプルコード
var scores = [45, 82, 70, 95, 60, 38];
// 70点以上のスコアをすべて抽出します。
var passed = scores.filter(function(score) {
return score >= 70;
});
console.log(passed); // 『82,70,95』と出力されます。
// 最初に見つかった80点以上のスコアを返します。
var first = scores.find(function(score) {
return score >= 80;
});
console.log(first); // 『82』と出力されます。
// 最初に見つかった80点以上のスコアの位置を返します。
var index = scores.findIndex(function(score) {
return score >= 80;
});
console.log(index); // 『1』と出力されます。
// オブジェクトの配列から検索します。
var users = [
{ name: "太郎", age: 25 },
{ name: "花子", age: 30 },
{ name: "次郎", age: 20 }
];
var user = users.find(function(u) {
return u.name === "花子";
});
console.log(user.age); // 『30』と出力されます。
[ 82, 70, 95 ] 82 1 30
概要
『配列.filter()』は配列の各要素に対してコールバック関数を実行し、『true』を返した要素だけを集めた新しい配列を作成します。元の配列は変更されません。条件に一致する要素がひとつもない場合は空の配列が返されるため、結果の配列に対して安全にループ処理を行うことができます。
『配列.find()』は条件に一致する最初の1つの要素だけを返すメソッドで、オブジェクトの配列から特定の項目を探すときに便利です。見つからなかった場合は『undefined』が返されるため、存在しない可能性がある場合は必ずチェックしてから使用してください。『配列.findIndex()』は要素そのものではなくインデックスを返す点が異なります。
単純に値が含まれているかどうかだけを調べたい場合は『配列.includes()』、すべての要素や一部の要素が条件を満たすかを判定したい場合は『配列.some() / 配列.every()』を使用してください。
対応ブラウザ
デスクトップ
全バージョンで対応しています
1 以前 ×
2 以前 ×
8 以前 ×
9 以前 ×モバイル
全バージョンで対応しています
Android Browser
37 以降 ○
4 以前 ×
Chrome Android
36 以降 ○
17 以前 ×
Firefox Android
79 以降 ○
3 以前 ×記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。