Karate框架基于静态数组从响应JSON筛选符合条件的首个key
修正后的可运行Karate代码
# 已提前获取到接口返回的list变量 * def evImos = [101, 102, 104] * def getFirstMatch = function() { for (let num of evImos) { // 按evImos的顺序优先匹配,找到第一个同时符合条件的项 let target = list.find(item => item.key == num && item.val.status === "on-voyage") if (target) { karate.log("匹配结果:", target.key) return target.key } } return null } # 执行函数获取结果 * def result = getFirstMatch() # 可选:添加断言验证结果符合预期 * match result == "104"
原有代码的问题说明
- 语法错误:Karate 中自定义函数的正确格式是
* def 函数名 = function(参数){},不需要额外多加function关键字 - 类型不匹配:接口返回的list中
key为字符串类型,evImos数组中存储的是数字类型,直接用===严格相等判断会因为类型不一致匹配失败 - 逻辑冗余:不需要调用
list.forEach,你写的函数本身已经实现了按evImos顺序遍历匹配的逻辑,直接执行函数即可拿到结果 - 性能优化:原代码用
filter会遍历整个list筛选所有匹配项,改成find找到第一个匹配项就会终止遍历,执行效率更高
内容的提问来源于stack exchange,提问作者Dhamo
相关产品推荐
相关产品推荐

