NetSuite中JS+HTML生成PDF时无法过滤column2空值的解决求助
问题分析与修复方案
你的代码存在两个核心问题导致过滤逻辑失效:
- 字段访问方式错误:
recordObjs.column2[i]的写法不符合对象数组的访问规则,应该是recordObjs[i].column2(recordObjs是对象数组,每个数组元素才包含column2属性)。 - 跳过逻辑错误:原代码中遇到
column2为null时仅执行i++,但循环本身会自动递增i,会导致跳过两次索引,且无论是否满足过滤条件,都会执行后续的表格行拼接,根本没实现跳过效果。
修复方案1:修正循环内判断逻辑
使用continue语句直接跳过当前循环迭代,避免错误的索引操作:
for (let i = 0; i < recordObjs.length; i++) { // 修正字段访问方式,同时处理null/undefined空值场景 if (recordObjs[i].column2 == null) { continue; // 跳过当前行,不执行后续的表格拼接 } htm += ` <tr> <td>${recordObjs[i].column0}</td> <td>${recordObjs[i].column2}</td> <td>${numberWithCommas(parseFloat(recordObjs[i].column3), '$')}</td> <td>${recordObjs[i].column4}</td> </tr>`; }
修复方案2:先过滤数组再循环(更简洁)
先把recordObjs中column2不为null的元素筛选出来,再遍历过滤后的数组,逻辑更清晰:
// 先过滤出column2不为null的记录 const filteredRecords = recordObjs.filter(record => record.column2 != null); // 遍历过滤后的数组生成表格行 filteredRecords.forEach(record => { htm += ` <tr> <td>${record.column0}</td> <td>${record.column2}</td> <td>${numberWithCommas(parseFloat(record.column3), '$')}</td> <td>${record.column4}</td> </tr>`; });
两种方案都能实现需求,方案2的代码可读性更高,推荐使用。
内容的提问来源于stack exchange,提问作者jose Gajardo
相关产品推荐
相关产品推荐

