JS数组匹配函数存在null时返回结果不符合预期问题咨询
代码错误点
- 循环边界错误:数组下标范围是
0 ~ 数组长度-1,你写的i <= p.length、j <= q.length会取到超出数组范围的undefined值,触发错误判断 - 空值判断逻辑错误:
if(p[i] || q[j] == null)的逻辑完全不符合需求,首先运算符优先级导致该语句实际判断逻辑是「p[i]为真 或者 q[j]等于null」,和你要求的「只要存在null就返回false」完全相反,而且没有判断p[i]为null的情况 - 循环逻辑完全错误:不需要嵌套两层循环,数组匹配应该按相同下标逐位对比,你写的嵌套循环会直接在第一次对比i=0、j=0的元素后就直接返回结果,根本不会遍历后续元素
- 缺少长度判断:两个数组长度不同的情况下本身就不相等,你没有提前做长度校验
修正后代码
var isSameTree = function(p, q) { // 长度不等直接返回false if (p.length !== q.length) return false for(let i = 0; i < p.length; i++) { // 任意位置出现null直接返回false if (p[i] === null || q[i] === null) return false // 同位置元素不等直接返回false if (p[i] !== q[i]) return false } // 全部校验通过返回true return true };
验证结果
输入[1,2,3]、[1,2,3]返回true,输入[1,null,2]、[1,2]返回false,符合需求。
内容的提问来源于stack exchange,提问作者DAS
相关产品推荐
相关产品推荐

