如何基于指定键值对对象将二维字符串数组映射为数字数组?
二维字符串数组转对应数字数组的实现方案
需要将二维字符串数组 arrString 基于给定的键值对 map,转换为对应的二维数字数组 arrNum。
输入示例
// 待转换的二维字符串数组 const arrString = [ ["A", "B"], ["C", "D"], ["E", "F"], ["D", "A"], ["F", "C"], ["G", "E"] ]; // 映射关系:键为数字字符串,值为字母 const map = { '0': 'A', '1': 'B', '2': 'C', '3': 'D', '4': 'E', '5': 'F', '6': 'G' };
目标输出
const arrNum = [ ["0", "1"], ["2", "3"], ["4", "5"], ["3", "0"], ["5", "2"], ["6", "4"] ];
现有代码的问题点
- 数组初始化错误:
Array.from(new Array(arrString.length), () => new Array(arrString[0].length).fill([]))会导致所有子数组引用同一个空数组,后续赋值会同步影响所有子数组。 - 遍历逻辑错误:使用
for(let ele in arrString)遍历数组时,ele是数组的索引而非元素,无法直接匹配map的值。 - 查找效率低下:每次用
Object.values(map).includes(ele)查找值,时间复杂度高,且无法直接获取对应的键。
正确实现思路
- 创建反转映射:把原map反转,生成
字母→数字字符串的映射对象,实现O(1)时间复杂度的查找。 - 批量转换数组:遍历
arrString的每一行和每个元素,用反转映射替换元素,快速生成目标数组。
完整代码实现
const arrString = [ ["A", "B"], ["C", "D"], ["E", "F"], ["D", "A"], ["F", "C"], ["G", "E"] ]; const map = { '0': 'A', '1': 'B', '2': 'C', '3': 'D', '4': 'E', '5': 'F', '6': 'G' }; // 1. 生成反转映射:字母对应数字字符串 const reverseMap = {}; for (const key in map) { reverseMap[map[key]] = key; } // 2. 遍历转换每个元素 const arrNum = arrString.map(row => row.map(char => reverseMap[char])); console.log(arrNum); // 输出:[["0","1"],["2","3"],["4","5"],["3","0"],["5","2"],["6","4"]]
代码解释
- 反转映射:通过遍历原map的键值对,将字母作为新对象的键,对应的数字字符串作为值,后续查找时直接通过
reverseMap['A']就能快速得到'0'。 - 数组转换:利用
Array.map()的嵌套调用,先处理每一行数组,再处理行内的每个字符,一行代码完成整个数组的转换,简洁高效。
内容的提问来源于stack exchange,提问作者seyet
相关产品推荐
相关产品推荐

