let arr = ['0', '1', '2', '0', '1', '2'];
for (let i = 0; i < arr.length; i++) {
if (arr[i] === '1' && arr[i + 1] === '2') {
arr.splice(arr[i], 2);
}
}
console.log(arr); //["0", "2"]
Почему в итоге остается массив ['0', '2']
, если по условию должны удалиться два элемента подряд с arr[i] === '1'
, а это '1' и '2'
, т.е. по итогу должно остаться ['0', '0'];
Если циклом проходите от первого элемента к последнему, то когда вырезается один из элементов - индексация смещается. Правильно в таком случае проходить циклом в обратном направлении.
Плюс еще arr.splice
первым аргументом принимает индекс элемента с которого начинать вырезать. А вы передаете значение arr[i]
;
let arr = ['0', '1', '2', '0', '1', '2'];
for (let i = arr.length - 1; i > 0; --i) { //for (let i = 0; i < arr.length; i++) {
if (arr[i] === '1' && arr[i + 1] === '2') {
arr.splice(i, 2);
}
}
console.log(arr);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском
Необходимо увеличить длину массива, дублируя элементы, до тех пор, пока его длина не станет требуемой