Javascript 为什么foreach从数组中跳过一个元素

Javascript 为什么foreach从数组中跳过一个元素,javascript,Javascript,我正在尝试使用forEach迭代一个数组,并根据一个条件执行一些操作 对于这个问题,我简化了条件,以试图了解发生了什么 我希望数组b=[]在操作之后出现,但事实并非如此,因为它只对元素的一半进行操作。为什么会发生这种情况 (这不是要删除b中的所有内容,只是试图理解它为什么会跳过偶数索引) var a=[1,2,3,4,5,6]; var b=a.slice(0); console.log('before b=',b);//b=[1,2,3,4,5,6] a、 forEach(函数(e){ 如果

我正在尝试使用
forEach
迭代一个数组,并根据一个条件执行一些操作

对于这个问题,我简化了条件,以试图了解发生了什么

我希望数组
b=[]
在操作之后出现,但事实并非如此,因为它只对元素的一半进行操作。为什么会发生这种情况

(这不是要删除
b
中的所有内容,只是试图理解它为什么会跳过偶数索引)

var a=[1,2,3,4,5,6];
var b=a.slice(0);
console.log('before b=',b);//b=[1,2,3,4,5,6]
a、 forEach(函数(e){
如果(e>0){
b、 拼接(a.indexOf(e),1);
}
});
console.log('after b=',b);//b=[2,4,6]

//但是我希望b=[]
您可以直接获取用于拼接的索引,并从数组中的值生成日志。您可能会注意到,数组将小于用于拼接的索引

var a=[1,2,3,4,5,6];
var b=a.slice(0);
控制台日志(b.join(“”));
a、 forEach(函数(e,i){
如果(e>0){
b、 拼接(a.indexOf(e),1);
console.log(i',:',b.join('');
}
});

控制台日志(b);//b=[2,4,6]
它没有。它贯穿每一个项目。问题是如何处理数组b。 首先从中删除索引0,即1。现在
b=[2,3,4,5,6]
。 然后索引1是3所以
b=[2,4,5,6]
。 然后索引2是5所以
b=[2,4,6]
。 下一个索引不存在,因此最后
b=[2,4,6]

要获得预期结果,请在拼接调用中使用
b.indexOf(e)

var a=[1,2,3,4,5,6];
var b=a.slice(0);
console.log('before b=',b);//b=[1,2,3,4,5,6]
a、 forEach(函数(e){
如果(e>0){
b、 拼接(b.indexOf(e),1);
}
});
console.log('after b=',b);//b=[2,4,6]

//但是我希望b=[]
您是基于a中元素的索引进行拼接的,但是当您拼接到其中时,b的索引会得到更新。您应该根据b中元素的索引尝试从b拼接。

谢谢。我现在明白了。我现在觉得自己好笨。问题是,最初只有
一个
数组,我直接对它进行切片,但仍然只能得到预期结果的一半。后来我添加了
b
,以了解发生了什么。我认为函数中存在另一个问题,它跳过了元素。不客气,在forEach中拼接数组时必须小心