Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript array.splice从其余元素中删除值_Javascript_Arrays - Fatal编程技术网

Javascript array.splice从其余元素中删除值

Javascript array.splice从其余元素中删除值,javascript,arrays,Javascript,Arrays,我遇到了array.splice的这个奇怪的副作用,并将代码提炼到重新创建所需的最低限度。是的,这些都可以通过array.filter在一行中完成,但我感兴趣的是我是否犯了错误,或者是否还有其他问题 var数组=[]; 对于(变量i=0;i

我遇到了array.splice的这个奇怪的副作用,并将代码提炼到重新创建所需的最低限度。是的,这些都可以通过array.filter在一行中完成,但我感兴趣的是我是否犯了错误,或者是否还有其他问题

var数组=[];
对于(变量i=0;i<10;i++){
array.push({
价值:i
});
}
forEach(函数(项、索引、数组){
如果(项值%2==1){
item.odd=真;
}否则{
item.odd=假;
}
若有(单数项){
console.log(“删除”+项.value);
阵列拼接(索引1);
}
});

console.log(数组)
我认为当你在每个奇数处拼接数组时,
forEach
会跳过下一个项目,这是一个偶数。所以这些项目根本不会被修改

var数组=[];
对于(变量i=0;i<10;i++){
array.push({
价值:i
});
}
forEach(函数(项、索引、数组){
console.log(item);//仅打印出0、1、3、5、7、9
如果(项值%2==1){
item.odd=真;
}否则{
item.odd=假;
}
若有(单数项){
console.log(“删除”+项.value);
阵列拼接(索引1);
}
});

console.log(数组)我想知道当你在数组上循环时,它是否会被编辑。比如,
index
值可能是原始数组中的索引,而不是新修改的数组中的索引。我有类似的想法。但是,我认为这种情况下的bug是项目和索引不符合预期,因此删除的元素太多或太少,而不是元素中的值消失。另外,如果是这样的话,我会注意将索引传递到回调和动态计算之间的区别——但在实践中它们的结果是一样的。这就解释了为什么
0
是唯一具有
odd
属性的“偶数”项。我仔细检查了代码,它看起来很正确。我想我们必须在允许对快照进行操作的便利性与允许对正在操作的阵列进行迭代修改之间做出选择。