JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで配列から素数を除外する方法|filter()を使った実装例

本記事では、数値の配列を受け取り、素数を除外した新しい配列を返すJavaScript関数の実装方法を解説します。Array.prototype.filter()メソッドと素数判定用の補助関数を組み合わせることで、シンプルかつ読みやすいコードが実現できます。

const arr = [34, 56, 3, 56, 4, 343, 68, 56, 34, 87, 8, 45, 34];

素数判定関数isPrimeの作成

まず、引数として受け取った数値が素数かどうかを判定する関数isPrimeを定義します。素数とは、1とその数自身以外に正の約数を持たない、1より大きい自然数のことです(例:2, 3, 5, 7, 11...)。

コード例

const arr = [34, 56, 3, 56, 4, 343, 68, 56, 34, 87, 8, 45, 34];

// 素数かどうかを判定する関数
const isPrime = n => {
    if (n === 1) {
        return false; // 1は素数ではない
    } else if (n === 2) {
        return true;  // 2は最小の素数
    } else {
        for (let x = 2; x < n; x++) {
            if (n % x === 0) {
                return false; // 割り切れる数が存在すれば素数ではない
            }
        }
        return true;
    }
};

// 素数を除外した新しい配列を返す関数
const filterPrime = arr => {
    const filtered = arr.filter(el => !isPrime(el));
    return filtered;
};

console.log(filterPrime(arr));

コードの解説

isPrime関数の処理の流れは以下の通りです。

  • n === 1の場合: 1は素数の定義に当てはまらないためfalseを返します。
  • n === 2の場合: 2は唯一の偶数の素数であるためtrueを返します。
  • その他の場合: 2からn-1までの整数で順番に割り算を行い、1つでも割り切れる数が見つかればfalse(素数ではない)、最後まで割り切れなければtrue(素数)を返します。

filterPrime関数では、元の配列にfilter()メソッドを適用し、isPrimefalseを返す要素(=素数ではない要素)だけで構成される新しい配列を生成しています。filter()は非破壊的なメソッドなので、元の配列は変更されません。

出力結果

コンソールには以下のように出力されます。この配列の中で素数は「3」のみのため、それ以外の12個の要素がそのまま残ります。

[
    34, 56, 56,  4, 343,
    68, 56, 34, 87,   8,
    45, 34
]

パフォーマンス改善のヒント

大きな数値を頻繁に判定する場合、ループ範囲を「n未満」ではなく「√n(平方根)以下」までに絞ると効率が大幅に向上します。ある合成数が約数ペアを持つとき、必ず片方が√n以下になる性質を利用した定番の最適化手法です。

const isPrime = n => {
    if (n < 2) return false;
    for (let x = 2; x <= Math.sqrt(n); x++) {
        if (n % x === 0) return false;
    }
    return true;
};

また、上記の書き方では1や負の数などのエッジケースもまとめて処理できるため、より堅牢な実装になります。

  1. 【初心者向け】JavaScriptのArray.from()メソッドの使い方を実例で解説

    JavaScript の Array.from() メソッドは、length プロパティを持つオブジェクト(配列風オブジェクト)や、文字列・Map・Set などの反復可能(イテラブル)なオブジェクトから、新しい Array オブジェクトを生成して返すためのメソッドです。元のオブジェクトは変更されず、常に新しい配列インスタンスが返されます。 基本構文 Array.from(obj, mapFunction, val) パラメータの説明 obj:配列へ変換したい対象のオブジェクト。配列風オブジェクト(length プロパティを持つもの)や反復可能なオブジェクトを指定します。 mapFunctio

  2. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g