Safe code for new Set()
may look like:
let items = [];
for (let item of set)
if (isBad(item))
items.push(item);
for (let item of items)
s
I would say yes, it's safe. When you iterate over the Set/Map using for ... of
under the hood the loop is going through @@iterator. And Iterator operates with .next()
only: so no indices and no matter what is before the current position. Only one next element is important.
So until you remove elements "in front of" the current iterator position - it's safe to do it.
Yes, you can simplify to that, it's totally safe.
From that last point follows that the only dangerous thing to do would be something like
const s = new Set([1]);
for (let x of s) {
s.delete(x);
s.add(1);
}
but not because of undefined behaviour or memory accumulation, but because of the infinite loop.