JavaScriptの配列操作メソッドの中で、filter()
は特定の条件に合致する要素だけを抽出するために非常に便利です。今回は、filter()
の基本的な使い方から注意点までをまとめていきたいと思います。
目次 非表示
filter()
メソッドは、配列の各要素に対して指定した条件をチェックし、その条件を満たす要素だけを新しい配列として返します。元の配列は変更されません。
JavaScript
// 数値の配列を定義
let numbers = [1, 2, 3, 4, 5, 6];
// 偶数のみを抽出
let evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4, 6]
オブジェクトの配列から特定の条件に合う要素を取得できます。
JavaScript
// ユーザー情報の配列
let users = [
{ id: 1, name: 'Alex', age: 25 },
{ id: 2, name: 'Jordan', age: 17 },
{ id: 3, name: 'Taylor', age: 35 }
];
// 18歳以上のユーザーのみ取得
let adultUsers = users.filter(user => user.age >= 18);
console.log(adultUsers);
// [object Object]
{
"id": 1,
"name": "Alex",
"age": 25
},// [object Object]
{
"id": 3,
"name": "Taylor",
"age": 35
}]
特定の値を含まない新しい配列を作成できます。
JavaScript
let words = ['cake', 'cookie', 'donut', 'chocolate'];
// 'cookie' を除外する
let filteredWords = words.filter(word => word !== 'cookie');
console.log(filteredWords); // cake, donut, chocolate
filter()
を使って、特定の条件を満たすHTML要素を取得できます。
See the Pen Untitled by tones (@tonescodedesign) on CodePen.
JavaScript
// ボタン要素のリストを取得
let buttons = Array.from(document.querySelectorAll('button'));
// data-active 属性が true のボタンのみ取得
let activeButtons = buttons.filter(button => button.dataset.active === 'true');
console.log(activeButtons); // 条件を満たすボタン要素のみ取得
filter()
は元の配列を変更せず、新しい配列を返します。元の配列を直接変更したい場合は、他のメソッドを使用する必要があります。
条件に合致する要素がない場合、空の配列が返ります。
JavaScript
let numbers = [1, 3, 5];
let evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [] (空の配列)
配列にundefined
やnull
が含まれている場合、それらの値をフィルタリングする処理を追加すると安全です。
JavaScript
let data = [10, null, 20, undefined, 30];
let validData = data.filter(value => value !== null && value !== undefined);
console.log(validData); // [10, 20, 30]
filter()
を使ってHTML要素を動的に変更する場合、アクセシビリティを考慮することが重要です。
- ボタンやリンクをフィルタリングするときは、
aria-hidden
を適切に設定しましょう。 - スクリーンリーダーに影響が出ないように、非表示にする要素は
display: none;
ではなくaria-hidden="true"
を設定しましょう。
JavaScript
// 非表示にする要素に aria-hidden を設定
let listItems = document.querySelectorAll('li');
listItems.forEach(item => {
if (!item.textContent.includes('重要')) {
item.setAttribute('aria-hidden', 'true');
}
});
filter()
は配列の中から特定の条件を満たす要素だけを抽出できる便利なメソッドです。適切に活用することで、データの処理や表示を簡潔に行えます。ただし、以下の点に注意しましょう。
filter()
は元の配列を変更せず、新しい配列を返します。- 条件に一致する要素がない場合、空の配列が返ります。
undefined
やnull
の値を適切に処理しましょう。- アクセシビリティを考慮し、適切な
aria-hidden
の設定を行いましょう。