Kok*_*zzu 5 javascript dictionary loops break
如何在Map没有forEach(所以我可以break在中间的情况下迭代javascript,或者有没有办法break从forEach?无法使用对象,因为顺序有时在某些浏览器上是随机的,其中Map顺序是按照定义的。
let map = new Map();
map.set(1,'google.com');
// very long list
map.set(12312,/[^a-z]+/);
let match = 'nothing';
for(let z in map) { // doesn't work, but works for object
if( foo.match(z) ) {
match = map.get(z); // map[z]; on object
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现的最近的东西是使用.keys()
let iter = map.keys();
while(!iter.next().done) {
if(foo.match(iter.value)) {
match = map.get(iter.value);
break
}
}
Run Code Online (Sandbox Code Playgroud)
对于它们的条目,它们以数组形式提供[key, value]。这是地图的默认迭代器,也可以通过该entries()方法使用。
对于他们的钥匙:keys().
对于他们的价值观:values().
下面是一个循环遍历条目、将它们解构为key和value常量的示例:
for (const [key, value] of map) {
// `key` is the key of the entry, `value` is the value
if (/*...some condition...*/) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
(不过,您不必解构,您可以使用for (const entry of map)然后用于entry[0]键和entry[1]值。)
或者对于循环键:
for (const key of map.keys()) {
// ...
Run Code Online (Sandbox Code Playgroud)
或者对于循环值:
for (const value of map.values()) {
// ...
Run Code Online (Sandbox Code Playgroud)
将默认迭代器应用于示例代码:
let map = new Map();
map.set(1,'google.com');
// very long list
map.set(12312,/[^a-z]+/);
let match = 'nothing';
for (const [key, value] of map) {
if (foo.match(key)) {
match = value;
break;
}
}
Run Code Online (Sandbox Code Playgroud)