【JavaScript】some / every – 配列の要素が特定の条件を満たしているかを調べる

JavaScriptで配列の要素が特定の条件を満たしているかを調べる場合、some()every()メソッドを使用します。今回は、それぞれの基本的な使い方から使用時の注意点までをまとめていきたいと思います。

some()メソッドとは?

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()メソッドとは?

every()は、すべての要素が条件を満たしている場合にtrueを返すメソッドです。1つでも条件を満たさない要素がある場合はfalseになります。

すべての数値が正の整数か確認

JavaScript
const numbers = [2, 4, 6, 8, 10];
const allEven = numbers.every(num => num % 2 === 0);
console.log(allEven); // true(すべて偶数のため)

some()とevery()の違い

メソッド条件を満たす要素が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

some() / every() の戻り値は true / false

戻り値はブール値(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を返します。