JavaScriptのforループでsplice()を使用して要素を削除する際に、削除後に取得される値の問題


const array = [1, 2, 3, 4, 5];
for (let i = 0; i < array.length; i++) {
  array.splice(i, 1);
  console.log(array[i]);
}

上記のコードでは、forループ内でsplice()関数を使用して配列の要素を削除しています。しかし、削除後に配列の要素にアクセスすると、予期しない値が表示されます。

  1. 逆順でループを実行する: forループを後ろから前に向かって実行することで、要素の削除が正しく行われます。以下に修正例を示します。
for (let i = array.length - 1; i >= 0; i--) {
  array.splice(i, 1);
  console.log(array[i]);
}
  1. 別の方法を使用する: splice()関数の代わりに、filter()関数やslice()関数を使用して要素を削除することもできます。以下に修正例を示します。
const newArray = array.filter((_, index) => index !== i);
console.log(newArray[i]);