【问题标题】:Is iterating over a javascript map.values() iterator using null termination a bad idea?使用空终止迭代javascript map.values() 迭代器是个坏主意吗?
【发布时间】:2020-08-09 07:08:23
【问题描述】:

我对 Javascript 还很陌生,目前正在处理一堆 linting 错误。寻求明确这一点。

我有一个 [int, object] 格式的映射,该映射是通过 JSON.parse-ing 来自服务器的一些数据并放入键值映射中获得的。

我需要遍历对象集。据我了解,这是: for(item in/of map) {} 性能不佳,最好使用迭代器。

当我使用 const iterator = map.values(); 获得地图值的迭代器并使用测试时

while(!iterator.done) {
  iterator.next();
}

我发现这无限循环,首先通过地图,然后通过“未定义”。

我目前的解决方案如下:

let item;
const iterator = map.values();
while ((item = iterator.next().value) != null) {
 // do stuff with item
}

这感觉像是一个合理的解决方案,但我希望能清楚地了解 while 循环内的赋值,还是依赖空终止在 javascript 中是一个坏主意;或者是否有更惯用的解决方案?

【问题讨论】:

    标签: javascript dictionary foreach iterator


    【解决方案1】:

    我认为大多数开发人员都会这样做:

    let value;
    Object.keys(obj).forEach((key) => { value = obj[key]; console.log(value)});
    

    对于这种常见的用例来说,处理迭代器的内部有点笨拙。

    【讨论】:

      【解决方案2】:

      您应该检查nextdone 属性返回的值。

      let result = it.next();
      while(!result.done) {
        result = iterator.next();
      }

      【讨论】:

        猜你喜欢
        • 2011-03-06
        • 2015-04-30
        • 2018-02-16
        • 2018-03-06
        • 2012-12-13
        • 1970-01-01
        • 2020-01-21
        • 1970-01-01
        • 2020-06-29
        相关资源
        最近更新 更多