抱歉,我之前写的问题有点仓促,所以无法用正确的例子正确地表达它。
下面的问题已经出现过很多次了,我总是被卡住。我对 Javascript 的了解只是初级水平。
我希望我的数组列表在迭代时发生变化。 本质上,迭代从第一次迭代中获得的全新数组。
arr = [ 1, 2, 1, 3, 4, 2, 4, 1, 2, 4 ]
if arr[n]== 1 and arr[n+1] == 2 || arr[n] == 3 || arr[n+1] == 4
then remove arr[n] and arr[n+1] and current index is +2 else
newarr.push[n] and current index is +1
Loop over
上述循环运行后我们得到:
newarr = [1, 2, 4, 4];
现在循环以相同的条件运行这个新数组。我们得到
newarr = [4,4];
现在由于条件无法满足,我们就跳出循环。
希望这更清楚。我已经尝试了所有方法,但循环始终引用原始数组,我只是不知道如何使其使用结果数组。这是可以通过递归或者reduce方法来完成的事情吗?
如有任何建议,我们将不胜感激。谢谢。
您可以使用递归。
每次调用
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]
您可以通过数组上的一个循环来完成此操作。诀窍是向后迭代。不需要递归。
const arr = [1, 2, 1, 3, 4, 2, 4, 1, 2, 4];
for (let i = arr.length - 1; i >= 0; i--) {
if ((arr[i] | 2) === 3 && arr[i+1] === arr[i] + 1) arr.splice(i, 2);
}
console.log(arr); // [4, 4]