我正在尝试使用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(function (e) {
if (e > 0) {
b.splice(a.indexOf(e), 1);
}
});
console.log('after b = ', b); // b = [2, 4, 6]
// but I expect b = []

答案 0 :(得分:3)
没有。它遍历每一个项目。这就是你用数组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(function (e) {
if (e > 0) {
b.splice(b.indexOf(e), 1);
}
});
console.log('after b = ', b); // b = [2, 4, 6]
// but I expect b = []
答案 1 :(得分:2)
您可以直接获取索引进行拼接,并从数组的值中生成日志。你可以看,数组变得小于拼接索引。
var a = [1, 2, 3, 4, 5, 6];
var b = a.slice(0);
console.log(b.join(' '));
a.forEach(function (e, i) {
if (e > 0) {
b.splice(a.indexOf(e), 1);
console.log(i, ': ', b.join(' '));
}
});
console.log(b); // b = [2, 4, 6]
要清空b
,您需要查找数组b
的索引,而不是a
并拼接它。
var a = [1, 2, 3, 4, 5, 6];
var b = a.slice(0);
a.forEach(function (e, i) {
if (e > 0) {
b.splice(b.indexOf(e), 1);
// ^
}
});
console.log(b);
答案 2 :(得分:1)
您根据a中元素的索引进行拼接,但是当您拼接时,b的索引会更新。您应该尝试根据元素IN b的索引从b拼接。