如何编写for循环实现查找替换?解决TypeError报错问题
问题分析与解决方案
报错原因
- 未定义变量传入:调用
lookupTests([AASC,GROU])时,AASC和GROU是未声明的变量,JavaScript会将其视为undefined,导致后续无法匹配translation中的键。 - 函数无返回值:
lookupTests函数仅修改了传入的数组,但没有返回该数组,因此var tests = lookupTests(...)会得到undefined。 - 存在性判断逻辑缺陷:
if (translation[currentTest])会把translation中值为假值(如''、0、false)的键误判为不存在,应该直接判断键是否存在而非值是否为真。
修正后的代码
function lookupTests(tests) { for (var i = 0; i < tests.length; i++) { const currentTest = tests[i]; // 用hasOwnProperty判断键是否存在,避免假值误判 if (translation.hasOwnProperty(currentTest)) { tests[i] = translation[currentTest]; } } // 返回处理后的数组 return tests; }; var translation = { 'AMIK':'AMIK', 'GROU':'GPW', 'AASC':'ABW', 'ICOO':'ABW', 'HPLC':'HBEW', 'SICK':'SICW', }; // 传入字符串字面量而非未定义变量 var tests = lookupTests(['AASC','GROU']); console.log(tests); // 输出: ["ABW", "GPW"]
额外优化(可选)
如果不想修改原数组,可以创建新数组返回,避免副作用:
function lookupTests(tests) { return tests.map(test => translation[test] || test); };
这个版本用map遍历数组,直接返回替换后的新数组,代码更简洁。如果test不在translation中,就保留原值。
内容的提问来源于stack exchange,提问作者grahamie
相关产品推荐
相关产品推荐

