如何使用外部变量过滤地图列表

How to filter a list of maps using an external variable

我有这样的地图列表:

[
  {
     "name": "Marco",
     "email": "marco@gmail.com",
     "age": 20
  }, {
     "name": "Polo",
     "email": "polo@gmail.com",
     "age": 25
  }   
]

而且我只想 return 电子邮件是特定电子邮件的条目,例如 polo@gmail.com
我通常会这样过滤:

 * def filter_func = function(x){ return x.email == "polo@gmail.com" }
 * def list = response
 * def filtered = karate.filter(list, filter_func)

但是电子邮件必须是一个变量,因为首先我创建了一个随机帐户,然后我得到了帐户列表并且必须检查该帐户是否已添加并且稍后将使用它的其他参数,例如年龄。

是否有任何方法可以将空手道过滤器函数与外部变量或其他策略一起使用?
变量用法是这样的(不是工作示例):

 * def email = "polo@gmail.com"
 * def filter_func = function(x, e){ return x.email == e }
 * def list = response
 * def filtered = karate.filter(list, email, filter_func)

没关系,发现我可以在函数内部引用变量,比如:

 * def email = "polo@gmail.com"
 * def filter_func = function(x){ return x.email == email }
 * def list = response
 * def filtered = karate.filter(list, filter_func)

给你,只是简单的 JS:

* def email = "polo@gmail.com"
* def fun = function(x){ return x.email == email }
* def filtered = karate.filter(response, fun)
* print filtered

自从 fun 声明后 email 之后,变量引用有效。

在极少数情况下,如果函数声明较早 - 例如当你想实现代码的复用时,注意你总是可以使用karate.get(name)通过变量名获取“当前存在”的变量值。