JavaScriptで配列の要素が特定の条件を満たしているかを調べる場合、some()
とevery()
メソッドを使用します。今回は、それぞれの基本的な使い方から使用時の注意点までをまとめていきたいと思います。
some()
は、配列の要素のうち1つでも条件を満たしているものがあればtrue
を返すメソッドです。すべての要素が条件に合わない場合はfalse
を返します。
JavaScript
const numbers = [1, 3, 5, 7, 8];
const hasEven = numbers.some(num => num % 2 === 0);
console.log(hasEven); // true(8が偶数のため)
every()
は、すべての要素が条件を満たしている場合にtrue
を返すメソッドです。1つでも条件を満たさない要素がある場合はfalse
になります。
JavaScript
const numbers = [2, 4, 6, 8, 10];
const allEven = numbers.every(num => num % 2 === 0);
console.log(allEven); // true(すべて偶数のため)
メソッド | 条件を満たす要素が1つでもあれば true | すべての要素が条件を満たす場合にtrue |
---|---|---|
some() | ⚪︎ | × |
every() | × | ⚪︎ |
JavaScript
const users = [
{ name: 'Alex', role: 'user' },
{ name: 'Jordan', role: 'admin' },
{ name: 'Taylor', role: 'user' }
];
const hasAdmin = users.some(user => user.role === 'admin');
console.log(hasAdmin); // true(Jordanが管理者のため)
上記は、ユーザーリストに管理者がいるか確認(some)する例です。「Jordan」が「admin」となっているためtrue
を返します。
JavaScript
const users = [
{ name: 'Alex', active: true },
{ name: 'Jordan', active: true },
{ name: 'Taylor', active: false }
];
const allActive = users.every(user => user.active);
console.log(allActive); // false(Taylorが非アクティブのため)
上記は、すべてのユーザーがアクティブか確認(every)する例です。「Taypar」が「false」となっているため、false
が返ってきます。
some()
は 常false
を返す(条件を満たす要素が1つもないため)every()
は 常にtrue
を返す(条件を満たさない要素がないため)
JavaScript
console.log([].some(() => true)); // false
console.log([].every(() => false)); // true
戻り値はブール値(true
またはfalse
)なので、数値やインデックスを取得したい場合はfindIndex()
やfilter()
などを使いましょう。
JavaScript
const numbers = [1, 2, 3, 4, 5];
const index = numbers.findIndex(num => num > 3); // 条件「num > 3」を満たす最初の要素のインデックスを探す
console.log(index); // 3
findIndex()
は、条件を満たす 最初の要素のインデックス(位置) を返します。この例の場合、条件 num > 3
に一致する最初の数は 4
(配列の 3番目の要素(0から数えるのでインデックスは3))なので3
を返します。もし、条件を満たす要素がない場合は-1
を返します。