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

如何基于指定键值对对象将二维字符串数组映射为数字数组?

二维字符串数组转对应数字数组的实现方案

需要将二维字符串数组 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"]
];

现有代码的问题点

  1. 数组初始化错误:Array.from(new Array(arrString.length), () => new Array(arrString[0].length).fill([])) 会导致所有子数组引用同一个空数组,后续赋值会同步影响所有子数组。
  2. 遍历逻辑错误:使用 for(let ele in arrString) 遍历数组时,ele 是数组的索引而非元素,无法直接匹配map的值。
  3. 查找效率低下:每次用 Object.values(map).includes(ele) 查找值,时间复杂度高,且无法直接获取对应的键。

正确实现思路

  1. 创建反转映射:把原map反转,生成字母→数字字符串的映射对象,实现O(1)时间复杂度的查找。
  2. 批量转换数组:遍历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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:20:45