【问题标题】:ECMAScript 6 Map & Set - Safe to delete during iteration? [duplicate]ECMAScript 6 Map & Set - 在迭代期间可以安全删除吗? [复制]
【发布时间】:2015-11-30 11:46:02
【问题描述】:

正如标题所示,迭代新的 Set & Map 类型并在迭代期间删除条目是否安全?

例如,在 Java 中,这会导致 ConcurrentModificationExceptions。

我无法在规范中找到有关此问题的任何信息。所以我想这是允许的??

【问题讨论】:

    标签: javascript dictionary set iteration ecmascript-6


    【解决方案1】:

    引用MapIterator object's next() section

    1. entries 为列表,它是 m 的 [[MapData]] 内部槽的值。

    2. index 小于条目的元素总数时重复。 每次评估此方法时都必须重新确定元素的数量。

    ... ...

    1. 将O的[[Map]]内部槽设置为undefined
    2. 返回 CreateIterResultObject(undefined, true)

    同样来自SetIterator object's next() section

    1. entries 为列表,它是 s 的 [[SetData]] 内部槽的值。
    2. index 小于条目的元素总数时重复。 每次评估此方法时都必须重新确定元素的数量。

    ... ...

    1. 将O的[[IteratedSet]]内部槽设置为undefined
    2. 返回 CreateIterResultObject(undefined, true)

    由于每次调用 next() 时都会重新计算值,因此如果当前指针 (index) 大于条目的长度,则不会抛出错误,而是返回undefined


    但是,一般来说,避免在迭代容器时修改容器。

    【讨论】:

    • 请注意,条目数并没有减少。他们只是设置为empty。所以它基本上只是说新元素确实必须得到迭代。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 2019-09-26
    • 1970-01-01
    • 2015-12-05
    相关资源
    最近更新 更多