You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IE11不兼容场景下将键值对数组添加到JavaScript Map?

兼容IE11的数组转Map/可键值访问结构方案

没问题,我来给你几个适配IE11的解决方案,既能快速把你的键值对数组转换成可通过字符串键访问的结构,又不用手动逐个调用Map.set():

方案1:转成普通JavaScript对象(最省心的兼容方案)

IE11对普通对象的支持非常完善,而且用对象访问值的语法更直观(可以用obj[key]或者obj.key)。我们可以用Array.forEach快速遍历数组填充对象:

let arr = [ ['ar', ['cl', 'bl']], ['bs', ['kl', 'ml']], ['cs', ['rk', 'uk']], ['da', ['mk', 'ak']] ];
let keyedObj = {};

// 遍历数组填充对象
arr.forEach(item => {
  keyedObj[item[0]] = item[1];
});

// 访问示例
console.log(keyedObj['ar']); // 输出: ['cl', 'bl']
console.log(keyedObj.bs);    // 输出: ['kl', 'ml']

注:IE11完全支持Array.forEach,所以这个方案没有兼容性问题。

方案2:手动填充Map实例(保留Map特性)

如果你确实需要使用Map而不是普通对象(比如需要键的类型不限于字符串、要保持插入顺序等),IE11的Map虽然不支持构造函数直接传入数组,但支持Map.set()方法。我们同样可以用遍历快速填充:

let arr = [ ['ar', ['cl', 'bl']], ['bs', ['kl', 'ml']], ['cs', ['rk', 'uk']], ['da', ['mk', 'ak']] ];
let map = new Map();

// 遍历数组填充Map
arr.forEach(item => {
  map.set(item[0], item[1]);
});

// 访问示例
console.log(map.get('ar')); // 输出: ['cl', 'bl']
console.log(map.get('cs')); // 输出: ['rk', 'uk']

方案3:封装可复用工具函数(更健壮)

如果需要多次做类似的转换,可以封装一个工具函数,顺便做一些边界校验,避免非法输入导致报错:

function createMapFromArray(arr) {
  const map = new Map();
  // 先校验输入是否为有效数组
  if (!Array.isArray(arr)) return map;
  
  arr.forEach(item => {
    // 确保每个项是包含键和值的数组
    if (Array.isArray(item) && item.length >= 2) {
      map.set(item[0], item[1]);
    }
  });
  return map;
}

// 使用示例
let arr = [ ['ar', ['cl', 'bl']], ['bs', ['kl', 'ml']], ['cs', ['rk', 'uk']], ['da', ['mk', 'ak']] ];
let myMap = createMapFromArray(arr);
console.log(myMap.get('da')); // 输出: ['mk', 'ak']

选择建议

  • 如果只是需要字符串键访问值,优先选方案1(普通对象),语法更简洁;
  • 如果需要Map的专属特性(比如非字符串键、迭代器支持等),选方案2或3。

内容的提问来源于stack exchange,提问作者Tums

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:19:39