フィルターしたい(filter)
1const people = [
2 { name: "Alice", age: 19 },
3 { name: "Bob", age: 30 },
4 { name: "Charlie", age: 34 },
5 { name: "David", age: 18 },
6];
7
8const adults = people.filter(person => person.age >= 20);
9// -> [{ name: "Bob", age: 30 }, { name: "Charlie", age: 34 }]
filterメソッドで、配列から条件を満たす要素だけを抽出できます。
Arrayの基本的なfilterの使い方は配列したい(filterしたい)を参照してください。
このページでは、オブジェクトの配列(シートから読み込んだ行データなど)を
条件でフィルタリングする実用的なパターンをまとめます。
複数条件で抽出したい
1const people = [
2 { name: "Alice", age: 19, active: true },
3 { name: "Bob", age: 30, active: false },
4 { name: "Charlie", age: 34, active: true },
5 { name: "David", age: 18, active: true },
6];
7
8// AND条件(&&)
9const activeAdults = people.filter(person => person.age >= 20 && person.active);
10// -> [{ name: "Charlie", age: 34, active: true }]
&&(AND)や||(OR)を組み合わせて、複数の条件を1つの式にまとめられます。
条件が複雑になってきたら、条件式を別の関数に切り出すと読みやすくなります。
1function isActiveAdult(person) {
2 return person.age >= 20 && person.active;
3}
4
5const activeAdults = people.filter(isActiveAdult);
リストに含まれるかどうかで抽出したい(includes)
1const targetNames = ["Alice", "David"];
2const targeted = people.filter(person => targetNames.includes(person.name));
3// -> [{ name: "Alice", ... }, { name: "David", ... }]
Array.includesと組み合わせると、
特定の値のリストに含まれる要素だけを抽出できます。
スプレッドシートで選択したIDや名前の一覧を元に絞り込みたい場合などに便利です。
Objectをフィルタリングしたい
1const scores = {
2 Alice: 85,
3 Bob: 42,
4 Charlie: 91,
5 David: 38,
6};
7
8// 60点以上の人だけ残す
9const passed = Object.fromEntries(
10 Object.entries(scores).filter(([name, score]) => score >= 60)
11);
12// -> { Alice: 85, Charlie: 91 }
Object自体にはfilterメソッドがありません。
Object.entriesで[キー, 値]の配列に変換してからfilterを使い、
Object.fromEntriesでObjectに戻す、という流れになります。
Mapをフィルタリングしたい
1const scores = new Map([
2 ["Alice", 85],
3 ["Bob", 42],
4 ["Charlie", 91],
5 ["David", 38],
6]);
7
8// 60点以上の人だけ残す
9const passed = new Map(
10 [...scores].filter(([name, score]) => score >= 60)
11);
12// -> Map(2) { "Alice" => 85, "Charlie" => 91 }
MapもObjectと同様に、直接filterを使うことはできません。
スプレッド演算子([...map])で[キー, 値]の配列に変換してからfilterし、
new Map(...)でMapに戻します。
ヒント
特定のキーの一覧でMapを絞り込みたい場合は、
Map型したい(特定のキーを取得したい)により実践的な例があります。