Удаление элементов массива по заданному признаку 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)