繁体   English   中英

在迭代时更改我的数组(Javascript)

[英]changing my array while iterating over it (Javascript)

抱歉,我有点仓促地写了我之前的问题,所以无法用正确的例子正确表达它。

下面的问题已经出现了很多次,我总是被卡住。 我对 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()时,都会将要修改的数组作为参数传递。

第一次调用此 function 时,您将提供原始数组。 这个 function 创建了一个新数组,从旧数组中获取所需的元素,并以新数组作为参数再次调用自身。这一直持续到不再对数组进行修改。

当您有递归 function 时,您还应该有一个停止递归以避免无限调用和堆栈溢出的条件。

在这个特定的例子中,如果没有对数组进行修改,因为根据我们的标准没有找到匹配的元素,我们在这一行停止递归

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM