Удаление элементов массива по заданному признаку js

Друзья, столкнулся с проблемой: Есть у меня массив строк и есть цикл, который по задумке, должен удалять из этого массива все строки, в которых есть "**" (две звездочки):

let arr = [
  '** Characters name **',
  'h0: Maks',
  'd0: Narrator',
  'n0: Merlin',
  'n1: Kitty',
  'n12: Berta',
  '** Например, вот здесь можно встатить свой комментарий или какое-то замечание. **',
  '** И это никак не скажется на работе эмулятора. **',
]

for (var i = 0; i < arr.length; i++) {
  if (arr[i].includes('**')) {
    arr.splice(i, 1)
  }
}

console.log(arr)

Но вот проблема, по неизвестным мне причинам, последний элемент массива хоть и имеет в строке "**", никогда не удаляется... Подскажите, почему так получается и как это поправить не сломав логику для других входящих в цикл массивов? Можно конечно дописать +1 к arr.length, но тогда есть риск, что это сломает еще что-нибудь.


Ответы (1 шт):

Автор решения: nörbörnën

Просто на моменте удаления не изменяйте индекс элемента

let arr = [
  '** Characters name **',
  'h0: Maks',
  'd0: Narrator',
  'n0: Merlin',
  'n1: Kitty',
  'n12: Berta',
  '** Например, вот здесь можно встатить свой комментарий или какое-то замечание. **',
  '** И это никак не скажется на работе эмулятора. **',
];

for (var i = 0; i < arr.length;) {
  if (arr[i].includes('**')) {
    arr.splice(i, 1);
  } else {
    i++;
  }
}

console.log(arr)

→ Ссылка