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

JMeter中如何筛选数组中不包含指定列表元素的值?

如何筛选出响应数组中不包含指定字符串数组元素的项?

我需要从响应数组fetchedStudyName中筛选出不包含输入数组excludeStudyName内任意字符串的元素,输入数组的值为["Inflammation","Perf","Test_Study"]。

目前已有Groovy代码可以成功筛选出包含指定元素的结果(共48个),代码如下:

import groovy.json.JsonSlurper;

def fetchedStudyName = [] 
1.upto(vars.get('studyNameFetched_matchNr') as int, { index ->
    fetchedStudyName.add(vars.get('studyNameFetched_' + index))
});


String tempExcludeStudyName = vars.get('excludeStudyName'); 
def excludeStudyName = new JsonSlurper().parseText(tempExcludeStudyName);

def valid = fetchedStudyName.findAll  { a -> 
    excludeStudyName.any {a.contains(it)}
}

但当我尝试修改条件为excludeStudyName.any {!a.contains(it)}或excludeStudyName.any {!(a.contains(it))}时,结果返回了响应数组的所有元素,不知道该怎么修正。


解决方案

你之前的写法错误在于误用了any方法:any只要检测到排除数组中有一个字符串不被当前元素包含,就会返回true,这意味着几乎所有元素都会被保留(除非某个元素包含了排除数组里的所有字符串)。

正确的逻辑应该是:当前元素不包含排除数组中的任何一个字符串,也就是需要用every方法来检查排除数组的所有元素,确保每一个都不被当前元素包含。

修正后的代码如下:

import groovy.json.JsonSlurper;

def fetchedStudyName = [] 
1.upto(vars.get('studyNameFetched_matchNr') as int, { index ->
    fetchedStudyName.add(vars.get('studyNameFetched_' + index))
});


String tempExcludeStudyName = vars.get('excludeStudyName'); 
def excludeStudyName = new JsonSlurper().parseText(tempExcludeStudyName);

// 筛选逻辑:当前元素不包含排除数组中的所有字符串
def valid = fetchedStudyName.findAll  { a -> 
    excludeStudyName.every { !a.contains(it) }
}

every方法会遍历排除数组的每一个元素,只有当所有元素都满足!a.contains(it)(即当前元素不包含该字符串)时,才会将这个元素加入结果集合,完全符合你的需求。


内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:52:17