// A map iterator can cope with removing the current entry. function test(pairs) { print(JSON.stringify(pairs)); var map = new Map(pairs); var all_keys = ''; var false_keys = ''; for (let [k, v] of map) { all_keys += k; if (!v) false_keys += k; } var log = ''; for (let [k, remove] of map) { log += k; if (remove) map.delete(k); } assertEq(log, all_keys); var remaining_keys = [...map].map(([k]) => k).join(''); assertEq(remaining_keys, false_keys); } // removing the only entry test([['a', true]]); // removing the first entry test([['a', true], ['b', false], ['c', false]]); // removing a middle entry test([['a', false], ['b', true], ['c', false]]); // removing the last entry test([['a', false], ['b', false], ['c', true]]); // removing all entries test([['a', true], ['b', true], ['c', true]]);