Вы можете использовать рекурсию.
Каждый раз, когда вы вызываете change_array()
, вы передаете в качестве аргумента массив, который вы хотите изменить.
При первом вызове этой функции вы предоставляете оригинал массив. Эта функция создает новый массив, берет необходимые элементы из старого массива и снова вызывает себя с новым массивом в качестве параметра. Это продолжается до тех пор, пока в массив не будут внесены изменения.
Когда у вас есть рекурсивная функция у вас также должно быть условие, которое останавливает рекурсию, чтобы избежать бесконечных вызовов и переполнения стека.
В этом конкретном примере, если в массив не было внесено никаких изменений, поскольку не было найдено соответствующего элемента в соответствии с нашими критериями, мы прекращаем рекурсию в этой строке
if(!found_element){ return false;}
Вот полный код
var original_arr = [ 1, 2, 1, 3, 4, 2, 4, 1, 2, 4 ];
change_array(original_arr);
function change_array(arr){
var temp_array=[];
var found_element=false;
console.log(arr);
for(let i=0;i<arr.length;i++){
if((arr[i]==1 && arr[i+1]==2 )|| (arr[i]==3 && arr[i+1]==4)){
found_element=true;
i++;
}else{
temp_array.push(arr[i]);
}
}
if(!found_element){ return false;}
change_array(temp_array);
}
при выполнении возвращает
[1, 2, 1, 3, 4, 2, 4, 1, 2, 4]
[1, 2, 4, 4]
[4, 4]