配列内の要素を削除する
解説/アルゴリズム
削除関数
// 配列.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);
}
}
後ろからループを行う場合は、要素を削除した後に詰められても関係が無いので、ループインデックスに手を加える必要がなくなる。