Closed1

jsで配列ループ時に要素を削除した時

high-ghigh-g

array.splice()をループ内で利用し、要素が削除されたときの挙動について

.forEach

  • spliceは破壊的メソッドの為、keyがずれることになり、致命的ダメージを追う時がある
  • arr.forEach((item, key, a) => { a.splice(0, 1) }) こういうコードは、0番目が消えるので、ループが回りきらない

.map

  • keyが変わることが無いので、途中削除されてもループには影響なし。
  • arr.map((item, key, a) => { a.splice(0, 1) }) こういうコードでも、ループ自体は最初の件数分回る。

※もちろん、元配列にspliceを書けているので、ループ後に元配列を確認すると、forEach同様データが削除されている。

このスクラップは2022/09/15にクローズされました