みさご解体新書

配列内の要素を削除する

解説/アルゴリズム

削除関数

// 配列.splice(インデックス, 1);
array.splice(i, 1);
const array = [10, 20, 30, 40];
const deleteIndex = 2;
const deleteNumber = array.splice(deleteIndex, 1);

console.log(array); // [10, 20, 40]
console.log(deleteNumber); // [30]

配列から i 番目にある要素を取り出すには Array#splice を使用する。

取り出し後、後ろにある要素が全て前に詰められる。

該当する要素すべてを削除する

for (let i = 0; i < items.length; i++) {
  const item = items[i];
  if (itemは削除対象か?) {
    items.splice(i, 1);
    i--; // 以降の要素が一つずつ前に詰められるので、もう一度このインデックスのオブジェクトを検査する必要がある。
  }
}

前からループを行い、対象オブジェクトを一つずつ見ていき、削除条件に合致したら配列から取り除く。

Array#splice() で削除した後、今のインデックスに次の要素が詰められるので、もう一度今のインデックスの要素を検査する必要がある。

なので Array#splice() の後にインデックスの値を一つ減らすコードを追加する。

for (let i = items.length - 1; i >= 0; i--) {
  const item = items[i];
  if (itemは削除対象か?) {
    items.splice(i, 1);
  }
}

後ろからループを行う場合は、要素を削除した後に詰められても関係が無いので、ループインデックスに手を加える必要がなくなる。

ソースコード

app.ts