Javascript Map.set在位置

时间:2017-12-15 08:12:10

标签: javascript ecmascript-6

有没有办法在现有密钥之前或之后将新元素插入Map? 至于Array将是:arr.splice(<POSITION>, 0, <NEW ELEMENT>);

谢谢!

1 个答案:

答案 0 :(得分:-2)

一般理论

A Map - 不像数组 - 没有“order”的语义。

它旨在最有效地存储和检索特定键的值。 (事实上​​,它的内部实现确实为此专门优化了一些结构/排序,“b-tree”是这里的关键字。

javascript实现

尽管如此,mozilla docs say:

  

Map对象按插入顺序迭代其元素 - for循环返回每个迭代的[key,value]数组。

更新:官方ECMA-262标准confirms this

就我个人而言,我猜测,实现者会为入口顺序保留一个单独的索引,以便进行最有效的单一访问。

基于此,您必须做的就是将地图视为不可变对象,并从中创建一个新对象:

  1. 迭代先前的地图
  2. 将每个元素添加到新地图中。 - 当正确的时间到来时,插入您的元素。 - 继续迭代其余部分
  3. 将您的新元素指定为旧元素的名称。
  4. 我现在不是您的具体用例,但也许您的问题也可以通过sort Iteration to specific criteria在迭代时解决。