javascript - 如何在没有 forEach 的情况下迭代 Javascript Map?

标签 javascript loops dictionary break

如何在没有 forEach 的情况下迭代 javascript Map(这样我就可以在中间 break,或者有没有办法 break from 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;
  }
}

我发现最接近的是使用 .keys()

let iter = map.keys();
while(!iter.next().done) {
  if(foo.match(iter.value)) {
    match = map.get(iter.value);
    break
  }
}

最佳答案

使用for-of . Maps提供三个迭代器:

  1. 对于它们的条目,它们以 [key, value] 数组的形式提供。这是 map 的默认迭代器,也可通过 entries() 方法使用。

  2. 对于他们的 key :keys()

  3. 对于它们的值:values()

这是一个遍历条目的示例,将它们解构为 keyvalue 常量:

for (const [key, value] of map) {
    // `key` is the key of the entry, `value` is the value
    if (/*...some condition...*/) {
        break;
    }
}

(您没有解构,但是,您可以使用for (const entry of map) 然后使用entry[0 ] 作为键,entry[1] 作为值。)

或者对于循环键:

for (const key of map.keys()) {
    // ...

或者对于循环值:

for (const value of map.values()) {
    // ...

将默认迭代器应用于您的示例代码:

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;
  }
}

关于javascript - 如何在没有 forEach 的情况下迭代 Javascript Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62211395/

相关文章:

python - 检索字典中最后一个键的值

javascript - EJS 噩梦——无法包含外部 View

javascript - Google Apps 脚本将脚本属性值存储为整数

javascript - 全局函数在函数内部不可见

c - C中的多线程for循环

字典中的 Python 函数参数列表

javascript - 嵌套 html 元素中的 onClick 事件

r - 循环遍历数据框中的列并根据 R 中的特定条件连接字符串

c# - 是否有合并两个集合的有效方法?

python - 在Python中设置嵌套字典: Why class method behaves differently from an standalone function?