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.