【JavaScript】配列内に数値(整数)が含まれているかどうかを判定する方法
はじめに
本記事では、配列の中に数値型(number)の要素が含まれているかどうかを判定するJavaScript関数の実装方法を解説します。
今回求められている仕様は以下のとおりです。
- 関数は要素の配列を受け取る
- 配列内に number 型の要素が1つでも存在するかをチェックする
- 存在すれば
true、存在しなければfalseを返す
実装例
const arr = ["123", "", "21345", "90"];
const findInteger = (arr = []) => {
const isInteger = num => {
return typeof num === 'number';
};
const el = arr.find(isInteger);
return !!el;
};
console.log(findInteger(arr));
出力結果
false
コンソールには上記のように false が出力されます。
コードの解説
typeof 演算子による型チェック
typeof num === 'number' で、要素が本当に数値型かどうかを判定しています。ここが重要なポイントです。サンプルの配列にある "123" や "90" は、見た目こそ数字ですが実際には文字列です。そのため number 型とは判定されません。
Array.prototype.find() による検索
arr.find(isInteger) は、条件を満たす最初の要素を返し、見つからなかった場合は undefined を返します。
!! による真偽値への変換
!!el は二重否定のテクニックで、見つかった要素(オブジェクトなど)を明示的に true / false のブール値へ変換しています。Boolean(el) としても同じ結果になります。
サンプル配列のすべての要素が文字列または空文字であるため、number 型の要素は存在せず、結果は false となります。仮に [123] のような数値リテラルが1つでも含まれていれば、true が返されます。
厳密に「整数」かどうかを判定したい場合
上記の実装は number 型全般(小数を含む)を対象としています。もし小数を除外して整数のみを判定したい場合は、ES2015で導入された Number.isInteger() を使うのが最もシンプルです。
const hasInteger = (arr = []) => {
return arr.some(Number.isInteger);
};
console.log(hasInteger([123, 45.6, "78"])); // true
console.log(hasInteger([45.6, "78"])); // falseNumber.isInteger() は、値が number 型かつ小数点以下を持たない場合にのみ true を返します。なお NaN や Infinity に対しては false を返す点にも注意してください。
まとめ
- 配列に数値型が含まれるか調べる →
Array.find()+typeof num === 'number' - 厳密に整数かどうか判定する →
Number.isInteger() - 結果をブール値に変換するには
!!やBoolean()が便利
用途に応じてこれらの方法を使い分けることで、意図した通りの型チェックを実現できます。
-
JavaScript配列から一意の値(重複なし)を取得する方法
JavaScriptの配列に含まれる重複した値を取り除き、一意の値(ユニークな値)だけを取得したい場合は、Setオブジェクトを使うのが最もシンプルで効率的な方法です。 Setは同じ値を1つしか格納できないデータ構造のため、配列をnew Set()に渡すだけで自動的に重複が排除されます。その後、スプレッド構文([...set])を使えば、簡単に元の配列形式へ戻すことができます。 サンプルコード 以下は、JavaScriptの配列からすべての一意の値を取得する実際のコード例です。 <!DOCTYPE html> <html lang=ja> <head> <
-
複数の値でJavaScript配列の要素を検索する方法
JavaScriptである配列(arr)が、別の配列(arr1)の複数の値・すべての要素を含んでいるかどうかを確認したい場面はよくあります。そんなときは、every()メソッドとincludes()メソッドを組み合わせることで、シンプルに判定できます。以下はそのサンプルコードです。 コード例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content=