代码之家  ›  专栏  ›  技术社区  ›  Lonnie Best

地图映射期间删除(键)。forEach公司

  •  15
  • Lonnie Best  · 技术社区  · 9 年前

    通常,在循环浏览列表时,无法安全地从列表中删除项目。对于ES6地图,这个概念仍然成立吗?

    var map = new Map([['a',1],['b',2],['c',3]]);
        map.forEach((value,key,map)=>
        {
              map.delete(key);
              let str = `["${key}",${value}] was deleted. `;
              str += `map.size = ${map.size}`;
              console.log(str);
        });

    看起来还可以。

    reference 来自Mozilla。这当然是可行的。我对任何将这种删除方法与其他方法(在更大的数据集上)进行比较的性能基准都感兴趣。

    2 回复  |  直到 6 年前
        1
  •  6
  •   Jaffer Wilson Dilip kumar    9 年前

    我想你是对的。我对ES6地图不太熟悉,但做了一些研究,发现这个博客在解释地图方面有点帮助:

    https://hackernoon.com/what-you-should-know-about-es6-maps-dc66af6b9a1e

    在这里,您还将获得删除机制的解释:

    var m = new Map()
    m.set('a', 1)
    m.set('b', 2)
    m.delete('a'); // true
    m.delete('c'); // false (key was not there to delete)
    

    希望这有帮助。

        2
  •  4
  •   Suren Srapyan    9 年前

    为什么?如果您使用的是同一个实例,实际上可以删除。它具有用于删除项目的功能,因此您可以删除。

    优化 不要从中删除任何项目 Map 或 array . Javascript引擎根据对象的形状进行优化。如果在某些对象上是相同的,则会对其进行优化。而不是根据当前对象的过滤值创建新对象。

    var map =  new Map([['a',1],['b',2],['c',3]]);
    map.forEach((value,key,map)=>
    {
          map.delete(key);
    });
    
    console.log(map);

    IEnumerable for each loop ,因为它以另一种方式工作,实际上它只提供读取和更新访问,而不是删除。