是否有一种很好的方法(除了使用JS异常)来停止ES6 Map对象中的forEach循环(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach)
从MDN上提供的示例 - 有没有办法停止枚举' bar' (跳过栏):
function logMapElements(value, key, map) {
console.log(`m[${key}] = ${value}`);
}
new Map([['foo', 3], ['bar', {}], ['baz', undefined]]).forEach(logMapElements);
对于建议关闭此问题的人:是的,它类似于有关Array.prototype.forEach的问题。
但同时又不同:大多数建议的答案都不适用于ES6套装和地图。只有抛出异常才有效,但我还要求其他方法
答案 0 :(得分:5)
没有充分的理由在ES6中再使用forEach
。您应该使用迭代器和for … of
循环,通常break
:
const m = new Map([['foo', 3], ['bar', {}], ['baz', undefined]]);
for (let [key, value] of m) {
console.log(`m[${key}] = ${value}`);
}
答案 1 :(得分:0)
对于那些不想要 for-of 的人,可以采用以下方法:
const length = myMap.size;
const iterator = myMap.entries();
for (let i = 0; i < length; i++) {
const item = iterator.next().value;
console.log(`myMap[${itemkey}] = ${value}`);
}
我个人遇到的一个好处是,这种方法在 es5 转译期间生成的代码更少(使用 Typescript 转译器及其所有 __values
和 __read
定义)...