如何用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
相关产品推荐
相关产品推荐

