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

111
31 марта 2021, 11:00

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'];

Answer 1

Если циклом проходите от первого элемента к последнему, то когда вырезается один из элементов - индексация смещается. Правильно в таком случае проходить циклом в обратном направлении.

Плюс еще 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); 

READ ALSO
помогите переписать 2 функции в одну [закрыт]

помогите переписать 2 функции в одну [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

105
как изменить titlle через vue

как изменить titlle через vue

при загрузки сайта title меняется

105
Увеличить длину массива

Увеличить длину массива

Необходимо увеличить длину массива, дублируя элементы, до тех пор, пока его длина не станет требуемой

110