この記事ではJavaScriptの『someメソッド』について、
some
メソッドとはsome
メソッドの構文some
メソッドの使い方- 配列要素の値がある条件を満たしているかをテストする
- 特定の値が配列に存在するかをテストする
- 特定の文字が存在するかをテストする
- 配列Aの各要素のいずれかが配列Bの各要素に含まれているかをテストする
some
メソッドの特徴- 空のスロットに対しては処理をスキップする
- テスト関数が一度でも
true
を返せば、配列の反復処理が終了する - 空の配列のテストではどのような条件でも
false
を返す
などを分かりやすく説明するように心掛けています。ご参考になれば幸いです。
someメソッドとは
some
メソッドは、配列の各要素が1つでもテスト関数を満たしていればtrue
を返すメソッドです。
some
メソッドは配列の各要素に対してテスト関数を実行します。テスト関数が一度でもtrue
を返せば、some
メソッドはtrue
を返します。それ以外はfalseを返します。
後ほどsome
メソッドの構文や使い方について詳しく説明しますが、まず以下に示す簡単なサンプルコードを見てみましょう。
const arr01 = [1, 3, 4];
const result01 = arr01.some((num) => num % 2 === 0);
console.log(result01); // true
const arr02 = [1, 3, 5];
const result02 = arr02.some((num) => num % 2 === 0);
console.log(result02); // false
上記のサンプルコードでは、配列内に偶数が含まれているかをテストしています。arr01
は配列内に1つ偶数(4
)が含まれているのでture
を返しますが、arr02
は配列内に1つも偶数が含まれていないためfalse
を返します。
someメソッドとeveryメソッドの違い
some
メソッドは配列の各要素が1つでもテスト関数を満たしていればtrue
を返します。一方、every
メソッドは配列の各要素が全てテスト関数を満たしていればtrue
を返します。
続きを見るevery
メソッドについては下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 【JavaScript】everyメソッドの「使い方」などをわかりやすく解説!
someメソッドの構文
some
メソッドの構文を以下に示します。
someメソッドの構文
array.some(callbackFn[, thisArg])
array
はテスト対象の配列です。some
メソッドの引数と返り値を以下に示します。
引数
callbackFn
- 配列の各要素に対して実行するテスト関数です。
- 配列の各要素をテストし、テストに合格した場合には
true
を返します。そうでない場合にはfalse
を返します。 - テスト関数は以下の引数を渡すことができます(第1引数の
element
のみを渡して使用することが多いです)。element
: テスト実行中の要素index
: テスト実行中の要素のインデックスarray
:some
メソッドでテストしている配列
thisArg
(省略可能)callbackFn
を実行する際にthis
として使用される値
返り値(戻り値)
- テスト関数(
callbackFn
)が一度でもtrue
を返せば、some
メソッドはtrue
を返す。それ以外はfalseを返す。
someメソッドの使い方
some
メソッドについて、以下に示している様々な使い方をこれから説明します。
- 配列要素の値がある条件を満たしているかをテストする
- 特定の値が配列に存在するかをテストする
- 特定の文字が存在するかをテストする
- 配列Aの各要素のいずれかが配列Bの各要素に含まれているかをテストする
各使い方について順番に説明します。
配列要素の値がある条件を満たしているかをテストする
以下のサンプルコードでは、some
メソッドを用いて、配列の要素が1つでも10より大きいものがあるかをテストしています。
const arr01 = [1, 3, 4, 7, 9, 11];
const result01 = arr01.some((num) => num > 10);
console.log(result01); // true
const arr02 = [1, 3, 4, 7, 9];
const result02 = arr02.some((num) => num > 10);
console.log(result02); // false
アロー関数を使わない場合には以下のようになります。
function isBiggerThan10(num) {
return num > 10;
}
const arr01 = [1, 3, 4, 7, 9, 11];
const result01 = arr01.some(isBiggerThan10);
console.log(result01); // true
const arr02 = [1, 3, 4, 7, 9];
const result02 = arr02.some(isBiggerThan10);
console.log(result02); // false
アロー関数を用いた方が、プログラムが短くなるのでオススメです。
特定の値が配列に存在するかをテストする
以下のサンプルコードでは、some
メソッドを用いて、特定の値('mango'
)が配列に含まれているかをテストしています。
const fruits01 = ['apple', 'banana', 'mango', 'orange'];
const result01 = fruits01.some((fruit) => fruit === 'mango');
console.log(result01); // true
const fruits02 = ['apple', 'banana', 'orange'];
const result02 = fruits02.some((fruit) => fruit === 'mango');
console.log(result02); // false
includes
メソッドを使用しても同様のテストをすることができます。includes
メソッドを使用した場合のサンプルコードを以下に示します(後ほど、some
メソッドとincludes
メソッドの違いについて説明します)。
const fruits01 = ['apple', 'banana', 'mango', 'orange'];
const result01 = fruits01.includes('mango');
console.log(result01); // true
const fruits02 = ['apple', 'banana', 'orange'];
const result02 = fruits02.includes('mango');
console.log(result02); // false
特定の文字が存在するかをテストする
以下のサンプルコードでは、some
メソッドを用いて、配列で指定した特定の文字がテスト対象の文字列に含まれているかをテストしています。
const targetItemNames = ['ワンピース', 'ナルト', 'ヒロアカ'];
const str01 = 'ワンピース 1巻';
const result01 = targetItemNames.some((word) => str01.includes(word));
console.log(result01); // true
const str02 = '呪術廻戦 1巻';
const result02 = targetItemNames.some((word) => str02.includes(word));
console.log(result02); // false
targetItemNames
から要素が1つずつ取り出され、word
に格納されます。その後、テスト対象の文字列がword
に含まれているかをincludes
メソッドを用いてチェックしています。テスト対象の文字列の中に、配列で指定した文字が1つでもあれば、some
メソッドはtrue
を返します。
配列Aの各要素のいずれかが配列Bの各要素に含まれているかをテストする
以下のサンプルコードでは、some
メソッドを用いて、配列arrA
の各要素のいずれかが配列arrB
の各要素に含まれているかをテストしています。
const arrA = [1, 2, 3];
const arrB = [4, 5, 1];
const result01 = arrA.some((element) => arrB.includes(element));
console.log(result01); // true
someメソッドの特徴
some
メソッドの特徴を以下に示します。
- 空のスロットに対しては処理をスキップする
- テスト関数が一度でも
true
を返せば、配列の反復処理が終了する - 空の配列のテストではどのような条件でも
false
を返す
各特長について順番に説明します。
空のスロットに対しては処理をスキップする
some
メソッドは空のスロットに対しては処理をスキップします。サンプルコードを以下に示します。
// 空のスロットがある場合
const arr01 = [1, , 1];
const result01 = arr01.some((num) => num !== 1);
console.log(result01); // false
// 空のスロットがない場合
const arr02 = [1, 2, 1];
const result02 = arr02.some((num) => num !== 1);
console.log(result02); // true
以下のサンプルコードに示すようにテスト関数の第2引数(index
)を見ると、空の配列スロットに対しては処理がスキップされていることがよりわかると思います。
const arr01 = [1, , 1];
const result01 = arr01.some((num, index) => {
console.log('index:', index);
return num !== 1;
});
console.log(result01);
// ログ出力
// index: 0
// index: 2
// false
テスト関数が一度でもtrueを返せば、配列の反復処理が終了する
some
メソッドはテスト関数が一度でもtrue
を返せば、配列の反復処理が終了します。サンプルコードを以下に示します。
const arr01 = [1, 2, 1];
const result01 = arr01.some((num, index) => {
console.log('index:', index);
return num !== 1;
});
console.log(result01);
// ログ出力
// index: 0
// index: 1
// true
空の配列のテストではどのような条件でもfalseを返す
some
メソッドは空の配列のテストではどのような条件でもfalse
を返します。サンプルコードを以下に示します。
// 空配列の場合
const arr01 = [];
const result01 = arr01.some(() => true);
console.log(result01); // false
// 空配列ではない場合
const arr02 = [1, 2, 3];
const result02 = arr02.some(() => true);
console.log(result02); // true
someメソッドとincludesメソッドの「違い」
some
メソッドとincludes
メソッドはどちらも配列に特定の要素が存在するかをテストすることができます。サンプルコードを以下に示します。
const fruits = ['apple', 'banana', 'mango', 'orange'];
// someメソッドを用いた場合
const resultSome = fruits.some((fruit) => fruit === 'mango');
console.log(resultSome); // true
// includesメソッドを用いた場合
const resultIncludes = fruits.includes('mango');
console.log(resultIncludes); // true
ではこれらの違いは何でしょうか。主な違いは2つあります。
some
メソッドはincludes
メソッドよりも柔軟なテストができるsome
メソッドはオブジェクトの配列に対してテストできる
各違いについて順番に説明します。
someメソッドはincludesメソッドよりも柔軟なテストができる
includes
メソッドは配列に特定の要素が含まれているかをチェックしますが、some
メソッドはテスト関数を用いて任意の条件式を指定することができます。
someメソッドはオブジェクトの配列に対してテストできる
some
メソッドとincludes
メソッドのどちらを用いても、オブジェクトの比較では、同じ参照を指しているかをテストします。そのため、以下のサンプルコードではtrue
が返るように見えますが、false
が返されます。参照先が異なるからです。
const items = [
{ name: 'table', color: 'red' },
{ name: 'chair', color: 'blue' },
{ name: 'sofa', color: 'green' },
];
const target = { name: 'chair', color: 'blue' };
// someメソッドを用いた場合
const resultSome = items.some((item) => item === target);
console.log(resultSome); //false
// includesメソッドを用いた場合
const resultIncludes = items.includes(target);
console.log(resultIncludes); //false
以下のサンプルコードの場合は、同じ参照を返しているのでtrue
が返されます。
const items = [
{ name: 'table', color: 'red' },
{ name: 'chair', color: 'blue' },
{ name: 'sofa', color: 'green' },
];
const target = items[1];
// someメソッドを用いた場合
const resultSome = items.some((item) => item === target);
console.log(resultSome); //true
// includesメソッドを用いた場合
const resultIncludes = items.includes(target);
console.log(resultIncludes); //true
some
メソッドはテスト関数を用いると、任意の条件式を指定することができます。このテスト関数にて、オブジェクトの各プロパティを比較することで、オブジェクトの配列に対してテストすることが可能です。サンプルコードを以下に示します。
const items = [
{ name: 'table', color: 'red' },
{ name: 'chair', color: 'blue' },
{ name: 'sofa', color: 'green' },
];
const target = { name: 'chair', color: 'blue' };
// someメソッドで柔軟にテスト
const resultSome = items.some(
(item) => item.name === target.name && item.color === target.color
);
console.log(resultSome); //true
本記事のまとめ
この記事ではJavaScriptの『someメソッド』について、以下の内容を説明しました。
some
メソッドとはsome
メソッドの構文some
メソッドの使い方- 配列要素の値がある条件を満たしているかをテストする
- 特定の値が配列に存在するかをテストする
- 特定の文字が存在するかをテストする
- 配列Aの各要素のいずれかが配列Bの各要素に含まれているかをテストする
some
メソッドの特徴- 空のスロットに対しては処理をスキップする
- テスト関数が一度でも
true
を返せば、配列の反復処理が終了する - 空の配列のテストではどのような条件でも
false
を返す
お読み頂きありがとうございました。