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

JavaScriptで配列から負の値だけを削除する方法(popメソッド活用)


複数の値を含む配列 arr が与えられたとします。たとえば、次のような配列です。

[-3, 5, 1, 3, 2, 10]

ここでの課題は、配列に含まれる負の値をすべて取り除く関数を書くことです。関数の実行が完了した時点で、配列は正の数だけで構成されている必要があります。

さらに重要な制約として、一時的な配列を新しく作成してはならないこと、そして要素の削除には pop() メソッドしか使えないことが挙げられます。

アルゴリズムの考え方

この問題は、次の2段階の処理で解決できます。

  1. 末尾の負の値を先に除去する
    while ループで、配列の末尾に連続する負の値を pop() で取り除きます。こうすることで、以降の処理では「配列の最後の要素は必ず正の数」という状態が保証されます。
  2. 残りの負の値を末尾の正の値と入れ替えて削除する
    配列を後ろから順に走査し、負の値を見つけたら、その位置へ配列の最後の要素(正の数であることが保証済み)をコピーし、そのうえで pop() を呼び出して末尾を削除します。

この手法なら追加の配列が不要で、空間計算量 O(1) のまま処理できます。ただし、要素を末尾の値で上書きするため、元の並び順は保持されない点には注意してください。

コード例

実際のコードは以下のとおりです。

// 末尾に連なる負の値をすべて取り除く
while (x.length && x[x.length - 1] < 0) {
    x.pop();
}
// 残りの範囲を後ろから走査し、負の値を置き換える
for (var i = x.length - 1; i >= 0; i--) {
    if (x[i] < 0) {
        // この要素を最後の要素(正であることが保証されている)で置き換える
        x[i] = x[x.length - 1];
        x.pop();
    }
}
console.log(x);

出力結果

上記のコードを入力 [-3, 5, 1, 3, 2, 10] に対して実行すると、コンソールには次のように出力されます。

[ 10, 5, 1, 3, 2 ]

負の値 -3 が取り除かれ、配列には正の数だけが残っていることが確認できます。


  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