FOR 循环内的 Groovy 嵌套 IF 条件不检查“else if”语句

时间:2021-05-27 18:40:48

标签: for-loop if-statement jenkins groovy

我试图从列表中返回我的 groovy 脚本中的 HTML 值并检查是否满足条件,其中代码不检查 else if 条件而只返回 if 条件的返回值.

有什么我遗漏的吗?

def groups = ["test","test1","test2","test3"]

  for(group in groups) {        //looping list
    if(group=="test") {
        html= """
        <input type="checkbox" json="TEST" name="value" value="TEST">
        <label for="TEST">TEST</label>
        """
          return html
    }
    else if(group=="test1") {
             html2="""
        <input type="checkbox" json="TEST1" name="value" value="TEST1">
        <label for="TEST1">TEST1</label>
            """  
        return html2
    }
  }

1 个答案:

答案 0 :(得分:0)

如评论中所述,由于您在每个 if 分支中返回,您的代码在第一次迭代后停止。

您正在寻找的是一个 collect,它迭代一个集合并返回该集合根据给定的闭包转换为其他内容:

def groups = ["test","test1","test2","test3"]

def html_list = groups.collect { group ->
    if (group == "test") {
        return """<input type="checkbox" json="TEST" name="value" value="TEST">
        <label for="TEST">TEST</label>"""
    } else if (group == "test1") {
        return """<input type="checkbox" json="TEST1" name="value" value="TEST1">
        <label for="TEST1">TEST1</label>""" 
    }
  }.grep()
  
println html_list 

最后的 grep() 只是为了去掉最后的 null,因为在这个例子中两个列表的大小不同。为了避免它,你可以有这样的事情:

def groups = ["test","test1","test2","test3"]

def html_list = groups.collect { group ->
    def test_name = group.toUpperCase()
    return """<input type="checkbox" json="${test_name}" name="value" value="${test_name}">
    <label for="${test_name}">${test_name}</label>"""
}

println html_list