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

如何用JavaScript根据单/多ID匹配二维数组返回对应城市名

根据ID匹配城市名的实现思路

需求说明

我有如下JavaScript数组,需要返回匹配的城市名:

[['75', 'Paris'], ['456', 'Marseille'], ['634', 'Toulouse'], ['668', 'Lyon'], ['035', 'Saint-Étienne']] 
  • 当输入为634时,函数应返回Toulouse;
  • 当输入为'634,75'时,需返回逗号分隔的城市列表:'Toulouse, Paris';
  • 当输入为'634,75,668'时,需返回逗号分隔的城市列表:'Toulouse, Paris, Lyon'。

更新:多ID以逗号分隔字符串传入(如'634,75,668'),使用id.split(',')配合map方法似乎可行。


实现步骤

1. 把数组转成高效的映射表

原始二维数组每次查找都要遍历,效率偏低。直接将其转换为ID-城市名的映射结构(推荐用Map,比普通对象更靠谱),这样单个ID的查询速度能达到O(1):

const cityMap = new Map(cityArray);

为什么选Map?因为原始ID是字符串类型(比如'035'),如果用普通对象,键会被自动转成数字,导致'035'和35被当成同一个键,而Map能完整保留字符串键的原样。

2. 统一处理输入格式

输入可能是单个数字/字符串,也可能是逗号分隔的字符串,先把它转成标准的ID数组:

  • 如果输入是带逗号的字符串,用split(',')分割,顺便用trim()清理ID前后的空格(比如处理'634, 75'这种带空格的输入);
  • 如果是单个ID,直接转成字符串后包装成数组(确保和Map里的键类型一致)。

3. 匹配城市并拼接结果

遍历处理好的ID数组,用Map取出对应的城市名,过滤掉找不到ID返回的undefined,最后用join(', ')把城市名拼成逗号分隔的字符串。


完整代码示例

const cityArray = [['75', 'Paris'], ['456', 'Marseille'], ['634', 'Toulouse'], ['668', 'Lyon'], ['035', 'Saint-Étienne']];

function getCities(input) {
  // 构建ID到城市的映射
  const cityMap = new Map(cityArray);
  
  // 处理输入,转成标准化的ID数组
  const ids = typeof input === 'string' && input.includes(',') 
    ? input.split(',').map(id => id.trim())
    : [String(input)];
  
  // 匹配城市,过滤无效ID
  const matchedCities = ids.map(id => cityMap.get(id)).filter(Boolean);
  
  // 拼接成结果字符串
  return matchedCities.join(', ');
}

// 测试验证
console.log(getCities(634)); // 输出 "Toulouse"
console.log(getCities('634,75')); // 输出 "Toulouse, Paris"
console.log(getCities('634,75,668')); // 输出 "Toulouse, Paris, Lyon"
console.log(getCities('634, 999')); // 输出 "Toulouse"(过滤无效ID)

内容的提问来源于stack exchange,提问作者Kung Fu Ninja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:47:39