You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"
}

问题分析

  1. 用map把data里的每个对象转成JSON字符串后,jsonData变成了字符串数组,直接用ScannedCode === jsonData做全等比较,永远不会成立
  2. 没有提取每个对象里的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:06:25