数组属性值存在性校验异常:指定存在值未触发预期弹窗
解决数组手机号匹配的逻辑错误问题
你这段代码的核心问题在于遍历逻辑的设计不符合需求:你现在是每遍历到一个不匹配的元素,就立刻打印push data,而不是等完整遍历完所有元素、确认没有匹配项之后再打印。
举个例子,当formattedNumber1是+2222222222时:
- 第一次循环(r=0),第一个元素的
primary_contact是+1111111111,不匹配,所以直接执行了console.log('push data') - 第二次循环(r=1),找到匹配的元素,会触发
alert,但此时日志已经被打印出来了,你可能误以为没弹窗,或者弹窗被页面元素遮挡了
要实现“存在目标值则alert,不存在则打印日志”的需求,正确的做法是先遍历整个数组确认是否存在匹配项,再统一执行对应操作。这里给你两种修正方案:
方案一:用标记变量+普通循环
// 先初始化一个标记,记录是否找到匹配的手机号 let isNumberUsed = false; // 遍历数组检查匹配项 for (let r = 0; r < this.global.userData.length; r++) { if (this.global.userData[r].primary_contact === this.formattedNumber1) { isNumberUsed = true; break; // 找到匹配项就立刻终止循环,不用继续遍历浪费性能 } } // 根据标记执行对应操作 if (isNumberUsed) { alert('Phone Number has been used already'); } else { console.log('push data'); }
方案二:用数组some()方法(更简洁)
数组的some()方法会自动遍历数组,只要有一个元素满足条件就返回true,并且会立刻终止遍历,代码更简洁:
const isNumberUsed = this.global.userData.some(item => item.primary_contact === this.formattedNumber1 ); if (isNumberUsed) { alert('Phone Number has been used already'); } else { console.log('push data'); }
这样修改后,不管目标值在数组的哪个位置,都会先确认是否存在匹配项,再执行对应的操作,就不会出现“匹配到了却先打印日志”的问题啦。
内容的提问来源于stack exchange,提问作者developer
相关产品推荐
相关产品推荐

