React Native Expo票务扫描APP:扫描码与JSON txid匹配验证问题
问题:票务扫描APP中扫描码与txid匹配失败的代码修正方案
我用Expo开发一款React Native票务扫描APP,扫描二维码后得到变量ScannedCode。APP的data数组(原代码中误处理为jsonData)包含多个带txid字段的JSON对象,但当前的if语句无法逐个校验扫描码是否与其中任意一个txid匹配,导致存在的有效txid被判定为无效,求代码修正方案。
原代码
var TicketStatus= "No status" var StatusColor = "#000000" var ScannedCode = ScannedWithCamera; //var jsonData= "ch_3LZwFMA4WCavBwXA0xaSxBTv"; var jsonData = data.map((txid) => { return ( JSON.stringify({ ...txid}) ) }) if (ScannedCode === jsonData) { TicketStatus = "VALID" StatusColor = "green" } else if (ScannedCode === "") { TicketStatus = "" } else { TicketStatus = "NOT VALID" StatusColor = "RED" }
问题分析
- 用
map把data里的每个对象转成JSON字符串后,jsonData变成了字符串数组,直接用ScannedCode === jsonData做全等比较,永远不会成立 - 没有提取每个对象里的
txid字段来和扫描码对比,完全偏离了"匹配txid"的核心需求
修正方案
直接利用数组的some方法遍历data,检查是否存在任意一个对象的txid与ScannedCode匹配,逻辑清晰且高效:
// 初始化状态 let TicketStatus = "No status"; let StatusColor = "#000000"; const ScannedCode = ScannedWithCamera; // 优先处理空扫描码情况 if (ScannedCode === "") { TicketStatus = ""; } else { // 检查data中是否存在txid匹配的对象 const isTicketValid = data.some(item => item.txid === ScannedCode); if (isTicketValid) { TicketStatus = "VALID"; StatusColor = "green"; } else { TicketStatus = "NOT VALID"; StatusColor = "RED"; } }
关键修改点
- 移除无意义的
map转JSON操作,直接使用原始data数组(假设data每个元素都包含txid字段) - 用
Array.some()替代全等比较,该方法遍历数组时,只要找到一个符合条件的元素就返回true,完美适配"任意匹配"的场景 - 调整逻辑顺序,先处理空扫描码,避免无效判断
- 将
var替换为let/const,符合现代JavaScript变量声明规范
内容的提问来源于stack exchange,提问作者Soreng
相关产品推荐
相关产品推荐

