如何实现动态Javascript地图合并?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (148)

以下是我使用的代码:

let map1=map2=map3=new Map();
map1.set(0, 'foo');
map1.set(1, 'foo');
map1.set(2, 'foo');
map1.set(3, 'foo');

//var map2 = new Map();
map2.set(1, 'foo2');
map2.set(2, 'foo2');

//var map3 = new Map();
map3.set(3, 'foo3');
let merge = new Map([...map1, ...map2, ...map3]);
//returns a map of maps data  Map(key: time, value: Map(key:id, value: Object))
let dataStore = getData(); 
let mapStore = [];
let merge;

for(i=value; i>=0; i--){
  if(dataStore.has(i)){
      //push map into the mapstore array
      mapStore.push(dataStore.get(i))
      //key object in map to notate that a full update should be performed. 
      if(dataStore.get(i).has(updateFlag)){
          //merge mapStore maps into new map
          merge = new Map(mapStore); //results in map with undefined key and value              
          break;
      }      
  }
}
提问于
用户回答回答于

使用以下方法合并这些地图:

let merge = new Map([arrayOfMaps])
用户回答回答于

显然需要一些规则来处理map 1和map 2中存在相同密钥的情况,这意味着替换,还是只包括以前不存在的替换:

let mapStore=new Map();
let map1=new Map();
map1.set(0, 'foo');
map1.set(1, 'foo');
map1.set(2, 'foo');
map1.set(3, 'foo');

let map2 = new Map();
map2.set(1, 'foo2');
map2.set(2, 'foo2');

let map3 = new Map();
map3.set(3, 'foo3');

map1.forEach(function(value, key)){
  if !mapStore.has(key){
     mapStore.set(key, value);
  }
}
map2.forEach(function(value, key)){
  if !mapStore.has(key){
     mapStore.set(key, value);
  }
}
map3.forEach(function(value, key)){
  if !mapStore.has(key){
     mapStore.set(key, value);
  }
}

扫码关注云+社区

领取腾讯云代金券