Karate中查找JSON数组元素多次出现的索引方法
在Karate中获取数组所有匹配元素的索引
你之前用indexOf只能拿到第一个匹配的索引,这很正常——因为这个方法本身就只返回目标值首次出现的位置。要拿到所有符合条件的索引,咱们可以用JavaScript的reduce方法遍历数组,收集所有匹配的索引值,具体脚本如下:
* def targetVIN = 'MMTestingVIN00002' * def response = result.items * def getMatchingIndices = function(arr, target) { // 用reduce遍历数组,收集匹配的索引 return arr.reduce(function(indices, currentItem, currentIndex) { if (currentItem.vin === target) { indices.push(currentIndex); } return indices; }, []); // 初始值是空数组,用来存储找到的索引 } * def matchingIndices = call getMatchingIndices response targetVIN * print matchingIndices // 输出结果就是 [0,2]
步骤解释:
- 先定义要查找的目标VIN和待处理的数组
response - 编写自定义函数
getMatchingIndices,它接收数组和目标值两个参数:- 用
reduce方法遍历数组,每次检查当前元素的vin是否和目标值匹配 - 如果匹配,就把当前索引加入到结果数组中
- 用
- 调用这个函数,传入你的数组和目标VIN,就能得到所有匹配的索引了
这种方法比indexOf更灵活,只要调整判断条件,还能用来查找其他字段匹配的所有索引~
内容的提问来源于stack exchange,提问作者Mihir
相关产品推荐
相关产品推荐

