JavaScript:当Name或Mobile缺失时如何显示对应__rowNum__?
解决对象属性缺失时输出对应行号的问题
我来帮你搞定这个问题~首先看你当前的代码,问题主要出在条件判断写反,还有一些小细节需要调整:
问题分析
你现在的代码逻辑是「当Name和Mobile都不为空时输出行号」,但你实际需要的是「Name或Mobile任意一个缺失/为空时输出行号」,所以条件完全写反了。另外还要注意:示例数据里有些行是直接没有这个属性(比如第3个对象没有Name,第4个没有Mobile),这时候单纯判断=== ""是不生效的,得同时考虑属性不存在的情况。
还有个小错误:你定义了rows是数组,但用了rows++,这会把数组变成数字类型,完全不符合预期,如果需要收集这些行号,应该用数组的push方法。
修正后的代码
这里给你两种写法,选你习惯的就行:
写法一:for循环(和你原代码风格一致)
var rows = []; // 遍历所有行数据 for(var i = 0; i < XL_row_object.length; i++){ const currentRow = XL_row_object[i]; // 判断Name为空/不存在, 或者 Mobile为空/不存在 const isFieldMissing = !currentRow.Name || currentRow.Name === "" || !currentRow.Mobile || currentRow.Mobile === ""; if(isFieldMissing){ // 输出期望格式的行号 console.log(`__rowNum__:${currentRow.__rowNum__}`); // 如果需要把行号收集到rows数组里,就保留这行,否则可以删掉 rows.push(currentRow.__rowNum__); } }
写法二:forEach遍历(更简洁)
const rows = []; XL_row_object.forEach(row => { // 同样的判断逻辑 if(!row.Name || row.Name === "" || !row.Mobile || row.Mobile === ""){ console.log(`__rowNum__:${row.__rowNum__}`); rows.push(row.__rowNum__); } });
代码说明
!currentRow.Name:可以同时覆盖「属性不存在(undefined)」和「属性值为空字符串」的情况,因为这两种值在逻辑非运算下都会返回true- 把原来的
&&改成||,表示任意一个条件满足就执行输出 - 用模板字符串
${}来拼接输出格式,和你的期望输出一致
用这个代码跑你提供的示例数据,就能得到你想要的结果:
__rowNum__:3 __rowNum__:4
内容的提问来源于stack exchange,提问作者adnan khan
相关产品推荐
相关产品推荐

