この記事では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); // falsetargetItemNamesから要素が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); // truesomeメソッドの特徴
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); // truesomeメソッドと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); //truesomeメソッドはテスト関数を用いると、任意の条件式を指定することができます。このテスト関数にて、オブジェクトの各プロパティを比較することで、オブジェクトの配列に対してテストすることが可能です。サンプルコードを以下に示します。
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を返す
お読み頂きありがとうございました。