为何调用replace方法时抛出TypeError: val.replace is not a function错误?
Hey,我来帮你搞定这个错误!
首先,你遇到的TypeError: val.replace is not a function问题根源很清晰:你在给数字用字符串的方法。replace()是字符串对象才有的方法,而val是数组里的数字(比如23、156这些),数字本身根本没有这个方法,所以浏览器直接报错了。
再看你的代码逻辑,其实完全没必要用replace()——你的需求是把偶数换成'even',奇数换成'odd',直接返回对应的字符串就行,绕replace反而画蛇添足。而且你写的val.toString()也没起作用,因为你没把转换后的字符串赋值给变量,val还是原来的数字。
接下来给你修正后的代码,顺便处理了数组里的小数(比如42.5)的情况,因为小数既不是偶数也不是奇数,你可以根据自己的需求调整这部分:
const myArray = [ [23, 156, 25, 10, 52, 23], [12, 100, 23, 56, 81, 93], [42.5, 71, 10, 23, 35, 11, 72, 99], [11, 100, 99, 102, 13, 8, 12] ]; let arr = myArray.map(item => { return item.map(val => { // 先判断是不是整数,非整数的情况可以自定义处理 if (Number.isInteger(val)) { // 三元运算符简化判断,直接返回目标字符串 return val % 2 === 0 ? 'even' : 'odd'; } else { // 比如这里返回原数值,或者改成'real number'之类的字符串都可以 return val; } }); }); console.log(arr);
关键改进点:
- 删掉了多余的
replace()调用,直接根据奇偶性返回'even'或'odd',这是最直接高效的实现方式。 - 增加了非整数的判断逻辑,避免小数被错误归类(比如42.5%2的结果是0.5,会走到else分支,你可以按需修改这部分)。
- 用三元运算符简化了if-else结构,让代码更简洁易读,当然你要是习惯if-else写法,改成下面这样也完全没问题:
if (val % 2 === 0) { return 'even'; } else { return 'odd'; }
这样修改后,代码就能正常运行,不会再抛出错误啦!
内容的提问来源于stack exchange,提问作者Peoray
相关产品推荐
相关产品推荐

