JavaScript如何实现多对象键值匹配并替换对应映射值
多字符批量映射匹配解决方法
原代码问题点
- 循环目标变量
answers5未定义,逻辑上你应该遍历拆分后的输入字符数组 - 校验条件错误:直接用
M2060[answersObject]查询,answersObject是完整的反转对象,无法作为键匹配到任何值 - 缺少跨映射对象的匹配逻辑:字符
t存储在M3060中,仅查M2060无法匹配到该字符 _.invert转换是多余步骤:你需要按顺序处理每个字符,不需要通过字符反查索引
完整实现代码
首先合并所有字符映射(避免重复判断字符所属对象):
// 合并M2060、M3060为总映射表,同名字段后者覆盖前者,可按需调整合并顺序 const allCharMap = Object.assign({}, M2060, M3060);
处理输入并批量匹配:
// 获取输入内容 const inputContent = document.getElementById('fname').value.trim(); // 拆分输入为单个字符数组 const charList = inputContent.split(''); // 存储所有字符的处理结果 const solutionList = []; // 遍历每个字符校验匹配 for (const singleChar of charList) { // 校验当前字符是否存在于总映射表中 if (allCharMap.hasOwnProperty(singleChar)) { // 匹配到字符,取出对应值(注意映射表中每个键对应的值是数组,取索引0的内容) const matchedVal = allCharMap[singleChar][0]; // 按规则拼接结果 const solution = `M${(20+20).toString()},${(60+0).toString()} ${matchedVal}`; solutionList.push(solution); } } // 所有匹配成功的结果都存储在solutionList中,可按需取用 console.log(solutionList);
如果你不想合并两个映射对象,也可以分开判断:
if (M2060.hasOwnProperty(singleChar)) { const matchedVal = M2060[singleChar][0]; // 后续处理逻辑 } else if (M3060.hasOwnProperty(singleChar)) { const matchedVal = M3060[singleChar][0]; // 后续处理逻辑 }
简化映射替换问题的实现
针对你提到的{0: ["g"], 1 :["H"]}和{g: "wow", "H" :["Help"]}替换需求,实现代码如下:
const indexMap = {0: ["g"], 1 :["H"]}; const valueMap = {g: "wow", "H" :["Help"]}; const replacedResult = {}; for (const indexKey in indexMap) { const targetKey = indexMap[indexKey][0]; replacedResult[indexKey] = valueMap[targetKey]; } // 输出结果:{0: "wow", 1: ["Help"]} console.log(replacedResult);
内容的提问来源于stack exchange,提问作者Bryan
相关产品推荐
相关产品推荐

