SQL邮编匹配查询后JS脚本返回null问题求助
问题分析与解决方案
你的脚本返回null主要有两个核心问题,下面逐一拆解并修复:
1. Postcode拆分后缺少前缀,比较逻辑完全失效
数据库返回的Postcode值是LA1-10,用split("-")拆分后得到["LA1", "10"]——结束值10没有前缀LA,和你提取的postcodeArea(比如LA4)格式完全不匹配,字符串比较自然不成立。
2. 字符串形式的数字比较逻辑错误
即使补全前缀,直接用字符串比较LA4和LA10也会出错:字符串是逐字符比较的,LA4的第三个字符是4,LA10的第三个字符是1,ASCII码中4 > 1,所以LA4会被判定为大于LA10,导致条件不满足。
修复后的完整脚本
export default { async slicePostcode() { const enteredPostcode = CollectionPostcode.text; const postcodeArea = enteredPostcode.trim().split(" ")[0]; // 拆分输入邮编的前缀和数字部分 const [areaPrefix, areaNum] = postcodeArea.match(/([A-Za-z]+)(\d+)/).slice(1); const areaNumInt = parseInt(areaNum, 10); await Query.run(); // 多数低代码工具中Query.data已是解析好的数组,仅当为字符串时才解析 let data = Query.data; try { if (typeof data === 'string') { data = JSON.parse(data); } } catch (error) { console.error("Error parsing JSON:", error); return null; } const matchingEntry = data.find((entry) => { const [start, end] = entry.Postcode.split("-"); // 提取起始值的前缀和数字 const startPrefix = start.match(/[A-Za-z]+/)[0]; const startNum = parseInt(start.match(/\d+/)[0], 10); // 补全结束值的前缀,再提取数字 const endNum = parseInt(`${startPrefix}${end}`.match(/\d+/)[0], 10); // 用数字范围做判断 return areaNumInt >= startNum && areaNumInt <= endNum; }); return matchingEntry || null; }, };
关键修复点说明
- 补全邮编前缀:从起始值
LA1中提取前缀LA,拼到结束值10前,得到完整的LA10 - 转数字比较:把邮编的数字部分转为整数,用数字范围判断替代字符串比较,避免字符顺序导致的错误
- 兼容数据格式:增加类型判断,仅当
Query.data是字符串时才执行解析,适配多数低代码工具的默认返回格式
内容的提问来源于stack exchange,提问作者PaulMcF87
相关产品推荐
相关产品推荐

