JavaScriptで配列から空白(undefined)の要素を削除する方法
はじめに
JavaScriptでは、次のような「穴(ホール)」を含む配列を扱うことがあります。
const arr = [4, 6, , 45, 3, 345, , 56, 6];
この配列には、値が代入されていない空の要素(未定義要素)が含まれています。ここでは、元の配列をその場(in place)で書き換えながら、undefined や空の要素だけを取り除くJavaScript関数を作成します。
なお、今回の目的は falsy(偽と評価される)な値をすべて削除することではなく、undefined および空の要素のみを対象とする点に注意してください。0 や false、空文字列などの falsy 値は配列に残ります。
実装の考え方
基本となるアプローチは以下の通りです。
forループで配列を走査するArray.prototype.splice()を使って該当要素をその場で削除する
重要なポイントは、要素を削除したときにインデックスを進めないことです。splice() で要素を1つ取り除くと後続の要素が前にずれるため、削除を行った場合は i++ を実行せず、同じ位置を再チェックする必要があります。
サンプルコード
const arr = [4, 6, , 45, 3, 345, , 56, 6];
const eliminateUndefined = arr => {
for(let i = 0; i < arr.length; ){
if(typeof arr[i] !== 'undefined'){
i++;
continue;
};
arr.splice(i, 1);
};
};
eliminateUndefined(arr);
console.log(arr);
実行結果
このコードを実行すると、コンソールに次のような出力が得られます。
[ 4, 6, 45, 3, 345, 56, 6 ]
補足:filter() メソッドとの比較
同様の処理は、filter() メソッドを使っても実現できます。
const cleaned = arr.filter(el => el !== undefined);
ただし filter() は新しい配列を返すため、元の配列そのものを書き換えたいケースでは、上記の splice() を使った方法が適しています。用途に応じて使い分けるとよいでしょう。
-
JavaScriptで配列から値を指定して要素を削除する方法
JavaScriptで配列から特定の値を持つ要素を削除するには、まずindexOf()メソッドでその値のインデックス(位置)を取得し、次にsplice()メソッドを使って該当する要素を取り除きます。 削除の基本的な手順 indexOf()で削除したい値のインデックスを取得する インデックスが見つかった場合(-1より大きい場合)、splice(index, 1)でその位置の要素を1つ削除する サンプルコード 以下のコードを実行して、実際の動作を確認してみましょう。 <html> <body> <script> var array = [10, 30, 40
-
JavaScriptでキューから要素を削除する方法(dequeueの実装)
キューから要素をデキュー(dequeue)するととは、キューの先頭(ヘッド)から要素を取り除くことを意味します。本記事では、コンテナ配列の先頭をキューのヘッドとして扱い、すべての操作をこれを基準に行います。dequeue関数の実装キューの先頭から要素を取り出すpop処理は、以下のように実装できます。dequeue() { // キューが空かどうかをチェック if (this.isEmpty()) { console.log(Queue Underflow!); return; } return this.container.shi