基于查找表替换数组中的值——JavaScript实现
用查找表替换数组中的缩写ID
问题场景
你需要将二维数组中的缩写ID替换为查找表对应的完整值,相关数据如下:
原始数组
const original = [ [ '18', 'v'], [ '20', 'aev'], [ '22', 'v'], [ '23', 'v'], [ '25', 'c'], [ '29', 'vv'], [ '30', 'c'] ]
查找表
const lookup = {'v' : 'monkey', 'aev' : 'dog', 'c' : 'cow', 'vv': 'lion'};
期望结果
const result = [ [ '18', 'monkey'], [ '20', 'dog'], [ '22', 'monkey'], [ '23', 'monkey'], [ '25', 'cow'], [ '29', 'lion'], [ '30', 'cow'] ]
解决方案
1. 使用map函数(推荐)
map是数组转换的首选方式,它会遍历原数组每个元素,返回转换后的新数组,不会修改原数组:
const result = original.map(item => [item[0], lookup[item[1]]]);
核心逻辑是精确匹配查找表的键:直接用子数组的第二个元素(如'aev')作为键取值,不会出现混淆'aev'和'v'的问题——对象的键是完全匹配的,不存在模糊匹配的情况。
2. 使用for循环
如果更习惯循环写法,直接遍历原数组,逐个构造新元素存入结果数组即可:
const result = []; for (const item of original) { result.push([item[0], lookup[item[1]]]); }
或者用传统的索引循环:
const result = []; for (let i = 0; i < original.length; i++) { const current = original[i]; result.push([current[0], lookup[current[1]]]); }
关于之前的匹配错误
你之前用循环出错,大概率是自己额外加了模糊匹配的逻辑(比如遍历查找表的键去部分匹配),其实完全不需要这么做——直接用子数组的第二个元素作为键去查找表取值,就是精确匹配,不会出现误匹配的问题。
内容的提问来源于stack exchange,提问作者Martijn
相关产品推荐
相关产品推荐

