JS使用三元运算符处理map返回值时数组出现undefined元素问题求解
问题根源
你的代码得到全是undefined的数组是两个错误共同导致的:
- 三目运算符语法使用错误:三目运算符是表达式,不是流程控制语句,你不能在三目运算符的分支中直接写带
return的代码块,这种写法不会生效,整个map的回调函数最终没有任何返回值,map方法会默认给每一项赋值undefined。 - 逻辑和需求不符:你原本的非字符串分支写的是返回
n.toString,既没有调用该方法,也和你预期的「非字符串返回空字符串」的需求完全不匹配。
正确写法
你可以直接用三目运算符返回对应值,箭头函数如果只有单个表达式可以省略大括号和return,直接返回表达式结果:
const newArr = ["abc", 12, 43, 8, 9, 0, 15, 23] const newww = newArr.map(n => typeof n === "string" ? n : '')
如果你坚持要在箭头函数里保留大括号(使用块级作用域写法),需要把return放到三目运算符外层,不要写在三目运算符的分支里:
const newww = newArr.map(n => { return typeof n === "string" ? n : '' })
处理后得到的newww就完全符合你的预期,不会出现undefined元素。
内容的提问来源于stack exchange,提问作者berboş
相关产品推荐
相关产品推荐

