如何在JavaScript数组map中检查处理undefined与0?代码异常排查
问题排查与修复
我来帮你梳理下代码里的问题,以及对应的修复方案~
核心问题分析
你的代码之所以没能实现预期效果,主要有两个关键逻辑错误:
- 三元运算符的假值判断误区:你用了
obj[col] ? obj[col] : "",但在JavaScript里0属于假值,所以当属性值是0时,这个表达式会返回空字符串,直接违背了你“0显示0”的需求。 - 不必要的原对象修改:你提前把
""或0的属性值强行设为0,这不仅污染了原始的userInfo对象,而且后续的三元判断又把这个0转成了空字符串,等于做了无用功。
修复后的代码
我们可以直接针对每个属性值做精准判断,既不修改原对象,又能完全满足你的需求:
let userInfo = { "l_idReference": "205000", "l_Name": undefined, "l_totalDebitsAch": 1, "l_totalCreditsAch": 0, "l_totalCreditAmountAch": 0, "l_creationDateAndTime": "2019-10-11T00:00:00" } const checkNullOrZero = (obj) => { const output = Object.keys(obj).map(col => { const value = obj[col]; // 精准匹配场景:undefined返回空字符串,其他值(包括0)原样返回 const displayValue = value === undefined ? "" : value; return `<td>${displayValue}</td>` }).join("") console.log(output) } checkNullOrZero(userInfo)
代码说明
- 先取出每个属性的
value,避免重复访问对象属性,提升可读性 - 用严格相等
===精准识别undefined的情况,返回空字符串;其他所有值(包括0)直接返回原值,确保0能正确显示 - 不再修改原始的
userInfo对象,避免意外污染原始数据
运行这段代码后,控制台输出的<td>标签里,l_Name会是空字符串,l_totalCreditsAch和l_totalCreditAmountAch会正确显示0,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Amit P.
相关产品推荐
相关产品推荐

