Я столкнулся с этим странным побочным эффектом array.splice и перегнал код до минимума, необходимого для воссоздания. Да, многое из этого можно сделать на одной строке с array.filter, но меня интересует, совершила ли я ошибку или что-то еще происходит.
var array = [];
for (var i = 0; i < 10; i++) {
array.push({
value: i
});
}
array.forEach(function(item, index, intArray) {
if (item.value % 2 == 1) {
item.odd = true;
} else {
item.odd = false;
}
if (item.odd) {
console.log("Removing " + item.value);
intArray.splice(index, 1);
}
});
console.log(array);