Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在地图中的特定索引处插入_Javascript_Typescript_Dictionary - Fatal编程技术网

Javascript 在地图中的特定索引处插入

Javascript 在地图中的特定索引处插入,javascript,typescript,dictionary,Javascript,Typescript,Dictionary,正如Map的文档所述: 贴图中的键是有序的,而添加到对象中的键不是有序的。因此 当对其进行迭代时,Map对象按顺序返回键 插入 为了充分利用这一点,我需要按照给定的特定顺序将一个元素插入Map 我知道这可以通过数组来实现,但我更喜欢使用Map,因为我需要按键进行大量查找,而Map在这种情况下运行良好,同时易于维护 我想出了这样的办法,我想知道是否有更好的办法 function insertAtIndex(index, key, value, map){ var iterator1 =

正如
Map
的文档所述:

贴图中的键是有序的,而添加到对象中的键不是有序的。因此 当对其进行迭代时,Map对象按顺序返回键 插入

为了充分利用这一点,我需要按照给定的特定顺序将一个元素插入
Map

我知道这可以通过数组来实现,但我更喜欢使用
Map
,因为我需要按键进行大量查找,而
Map
在这种情况下运行良好,同时易于维护

我想出了这样的办法,我想知道是否有更好的办法

  function insertAtIndex(index, key, value, map){
    var iterator1 = map[Symbol.iterator]();
    var tmpMap = new Map();
    var tmpIndex=0;
    for (let item of iterator1) {
        if(tmpIndex === index){
            tmpMap.set(key, value);
        }
        tmpMap.set(item[0], item[1]);
        tmpIndex++;
    }
    return tmpMap;
  }

insertCardAtIndex(索引:编号,键:字符串,值:boardCard,映射:映射):映射{
设clonedMap=newmap(Map);
设tmpMap=newmap();
设tmpIndex=0;
for(让数组.from的条目(clonedMap.entries())){
if(tmpIndex==索引){
tmpMap.set(键、值);
}
tmpMap.set(条目[0],条目[1]);
tmpIndex++;
}
返回tmpMap;
}
对于我的用例,我将永远不必处理一个足以使性能成为主要关注点的映射,因此如果这能使代码更具可读性和可维护性,我愿意牺牲性能


我使用的地图有一个“字典”的价值观。无法按特定顺序插入元素这一事实让我怀疑是否应该使用数组,即使有快速查找,以及类似
.has()
.get()
.set()的方法
非常有用,但不值得在特定索引处插入。

您可以将
映射
转换为
数组
,用于插入元素,然后再次转换为
映射
这不是一个有效的解决方案,但您提到在您的用例中,可维护性比性能更重要

如果索引大于地图的大小,此版本的优点是可以工作。例如,在位置
map.size+1
插入一个元素仍然会在底部添加项目,在算法中,项目不会在底部插入。如果您确实希望忽略超出范围的插入,那么可以通过在函数中进行检查轻松地对其进行寻址,但这似乎更健壮

函数insertAtIndex(索引、键、值、映射){
const arr=数组。from(map);
arr.splice(索引,0,[键,值]);
返回新地图(arr);
}
常数m=新映射();
m、 集合('0',0);
m、 集合('1',1);
m、 集合('2',2);
log(Array.from(m.keys());
设m2=插入指数(1,'0.5',0.5,m);
console.log(Array.from(m2));
m2=插入索引(0’-1’,-1,m2);
m2=插入索引(5,'5',5,m2);
m2=插入索引(10,'10',10,m2);

console.log(Array.from(m2))为什么不按照你喜欢的方式排列一组地图的键呢?我的意思是,在我的例子中,我有一些看板,我想用示例来组织一切。但是当你把卡片从一块板拖放到另一块板上,或者在同一块板内。有太多的索引操作更改正在进行。我相信在这种情况下使用map不是最好的解决方案。我希望能够通过id轻松找到一张卡,并移动它。第一部分还可以,第二部分比使用简单的对象数组要混乱得多。我想我会放弃我的地图
  insertCardAtIndex(index: Number, key: string, value:boardCard, map:Map<string, boardCard>): Map<string, boardCard> {
    let clonedMap = new Map(map);
    let tmpMap = new Map<string, boardCard>();
    let tmpIndex = 0;

    for (let entry of Array.from(clonedMap.entries())) {
      if(tmpIndex === index){
        tmpMap.set(key, value);
      }
      tmpMap.set(entry[0], entry[1]);
      tmpIndex++;
    }

    return tmpMap;
  }