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

【JavaScript】配列の空きインデックス(ホール)に値を挿入するpushAtEmpty()の実装方法

配列の中の空きインデックスに値を挿入するには

JavaScriptでは、次のように配列の中に「ホール」と呼ばれる空の要素(undefined)が含まれることがあります。

const arr = [43,534534,645,64,,645,64,,645,,645,,65,,645,,64];

本記事では、指定した値を配列内の最初に見つかった空きインデックスに挿入する pushAtEmpty() メソッドを実装していきます。もし空きスペースがひとつも存在しない場合は、通常の push() と同じく配列の末尾へ値を追加する仕様とします。

実装コード

まずはコード全体を見てみましょう。forループで先頭から順に空き位置(undefined)を探し、見つかった箇所を splice() メソッドで新しい値に置き換えます。

const arr = [43,534534,645,64,,645,64,,645,,645,,65,,645,,64];

Array.prototype.pushAtEmpty = function(element){
    let index;
    for(index = 0; index < this.length; index++){
        if(this[index] === undefined){
            this.splice(index, 1, element);
            break;
        }
    }
    // 空きスペースが見つからなければ末尾に追加
    if(index === this.length){
        this.push(element);
    }
};

arr.pushAtEmpty(23);
arr.pushAtEmpty(33);
arr.pushAtEmpty(43);
arr.pushAtEmpty(53);
arr.pushAtEmpty(63);
arr.pushAtEmpty(73);
arr.pushAtEmpty(83);
arr.pushAtEmpty(93);

console.log(arr);

コードの解説

処理の流れを順番に見ていきます。

① 空き位置の探索:forループで配列を先頭から走査し、this[index] === undefined が成立する最初のインデックスを探します。配列リテラル内でカンマが連続することで生まれた「穴」は undefined として扱われるため、この比較で検出できます。

② 値の置き換え:空き位置が見つかったら、splice(index, 1, element) を呼び出して該当インデックスの1要素だけを新しい値で置き換え、break文でループを即座に脱出します。

③ 空きがない場合のフォールバック:ループが最後まで完走した場合(index === this.length)、空きスペースは存在しないということなので、push(element) で配列の末尾に値を追加します。

補足:Array.prototypeの拡張について

ここでは解説をシンプルにするため Array.prototype を直接拡張していますが、実務のコードでは他ライブラリとの名前衝突や列挙時の副作用を避けるために、独立した関数として定義するか、Object.defineProperty を使って列挙不可(enumerable: false)として追加するのが安全です。

出力結果

上記コードを実行してコンソールを確認すると、元々空いていた位置へ順番に値が埋め込まれていることがわかります。

[
    43, 534534, 645, 64,
    23, 645, 64, 33,
    645, 43, 645, 53,
    65, 63, 645, 73,
    64, 83, 93
]
  1. JavaScriptの基本配列メソッド解説!push・pop・shift・unshift・spliceの使い方を実例付きで紹介

    JavaScriptには、配列を操作するための便利な組み込みメソッドが数多く用意されています。その中でも特によく使われるのが、要素の追加や削除を行う以下の5つの基本メソッドです。 JavaScriptの主要な配列メソッド一覧 メソッド説明 Array.push()配列の末尾に要素を追加します。 Array.pop()配列の末尾から要素を取り除きます。 Array.unshift()配列の先頭に要素を追加します。 Array.shift()配列の先頭から要素を取り除きます。 Array.splice()配列内の任意の位置で要素の追加・削除を行います。 これらのメソッドは、配列の

  2. JavaScriptで配列を空にする4つの方法【サンプルコード付きで解説】

    JavaScriptで配列を空にする方法は、主に4つあります。それぞれ動作の仕組みや特徴が異なるため、目的に応じて適切な方法を選ぶことが大切です。配列を空にする4つの方法新しい空の配列を代入する:配列変数に、新しく作成した空の配列を代入します。最もシンプルな方法ですが、元の配列を参照している他の変数が残る点には注意が必要です。lengthプロパティを使う:配列のlengthプロパティに0を設定するだけで、すべての要素を削除できます。高速で、元の配列への参照も維持されるため、実務で最もよく使われる方法のひとつです。popメソッドを使う:配列の要素数が0になるまで、popメソッドで末尾の要素を繰り