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

如何在JavaScript中将ISO3国家代码转换为ISO2国家代码?

ISO3国家代码转ISO2的JavaScript实现方案

直接用Intl.Locale确实没法完成这个转换,因为它的region属性只认ISO2格式的代码,没法直接通过ISO3反向导出对应的ISO2。下面给两个可行的解决方法:

方法一:手动维护映射表(最稳妥)

直接定义一个包含ISO3与ISO2对应关系的对象,这种方式不依赖浏览器的API支持,兼容性拉满,结果也绝对准确。

// 示例包含常用国家的映射,你可以根据需求补充完整的ISO3166-1代码列表
const iso3ToIso2Map = {
  'USA': 'US',
  'CHN': 'CN',
  'GBR': 'GB',
  'JPN': 'JP',
  'DEU': 'DE',
  'FRA': 'FR',
  'AFG': 'AF',
  'ALB': 'AL',
  'DZA': 'DZ'
};

function convertIso3ToIso2(iso3Code) {
  // 统一转大写,避免大小写不匹配的问题
  const upperCode = iso3Code.toUpperCase();
  // 有匹配就返回ISO2代码,没有就返回null
  return iso3ToIso2Map[upperCode] || null;
}

// 测试示例
console.log(convertIso3ToIso2('USA')); // 输出 'US'
console.log(convertIso3ToIso2('chn')); // 输出 'CN'
console.log(convertIso3ToIso2('XXX')); // 输出 null

完整的ISO3166-1代码列表可以从国际标准化组织的公开文档里整理,这样能覆盖所有国家和地区。

方法二:基于Intl API自动生成映射表(适合不想手动维护的场景)

如果不想手动整理列表,可以借助浏览器的Intl API自动生成映射,但要注意部分老旧浏览器可能不支持Intl.supportedValuesOf方法。

function buildIso3ToIso2Map() {
  const iso3ToIso2 = {};
  // 获取所有支持的ISO2区域代码
  const iso2Regions = Intl.supportedValuesOf('region');

  iso2Regions.forEach(iso2 => {
    try {
      // 创建对应区域的Locale对象
      const locale = new Intl.Locale(`en-${iso2}`);
      // 通过扩展标签获取ISO3代码
      const regionExtension = locale.extensions.get('u')?.get('rg');
      if (regionExtension) {
        const iso3 = regionExtension.value;
        iso3ToIso2[iso3.toUpperCase()] = iso2;
      }
    } catch (e) {
      // 跳过不支持的区域
      return;
    }
  });
  return iso3ToIso2;
}

// 生成映射表后使用
const fullMap = buildIso3ToIso2Map();
console.log(fullMap['USA']); // 输出 'US'

不过这个方法的兼容性不如手动维护,而且部分浏览器可能无法正确返回ISO3扩展信息,所以还是更推荐第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:52:45