如何在ES6 Map中中断/中断/停止forEach?

时间:2017-03-10 21:41:49

标签: javascript ecmascript-6

是否有一种很好的方法(除了使用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套装和地图。只有抛出异常才有效,但我还要求其他方法

2 个答案:

答案 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 定义)...