michael@0: // Removing a Map entry already visited by an iterator does not cause any michael@0: // entries to be skipped. michael@0: michael@0: var map = Map(); michael@0: for (var i = 0; i < 20; i++) michael@0: map.set(String.fromCharCode('A'.charCodeAt(0) + i), i); michael@0: michael@0: var log = ''; michael@0: for (var [k, v] of map) { michael@0: log += k; michael@0: if (v % 5 === 4) { michael@0: // Delete all entries preceding this one. michael@0: for (let [k1, v1] of map) { michael@0: if (k1 === k) michael@0: break; michael@0: map.delete(k1); michael@0: } michael@0: } michael@0: } michael@0: assertEq(log, 'ABCDEFGHIJKLMNOPQRST'); michael@0: assertEq(map.size, 1); // Only the last entry remains. michael@0: assertEq(map.get('T'), 19);