forEach seems to behave exactly like what we want.
Deleted elements aren't iterated over and added elements either.
var a = [1, 2, 3], b = []; a.forEach(function (e) {if (e==1) a.splice(1, 1); b.push(e)}); b == [1, 3]
var a = [1, 2, 3], b = []; a.forEach(function (e) {if (e==1) a.push(4); b.push(e)}); b == [1, 2, 3]
So removing yield and using forEach would fix this issue.
If removing yield isn't a big deal and requires only modifying event/core, I don't see why we should do a followup to modify the same code.