按值过滤数组

时间:2018-09-24 22:12:21

标签: freemarker mvel

说我有一个名为users的无序数组:

"users": [
   {"id": "6", "name": "Bob"},
   {"id": "2", "name": "Ryan"}
]

是否可以通过MVEL(或Freemarker)模板在id == 2中吸引用户?如果一个或多个,则抛出错误。 @foreach似乎有可能,但我希望更简洁。

1 个答案:

答案 0 :(得分:0)

FreeMarker对此没有内置功能(它具有{"6": "Bob", "2": "Ryan"}的功能),因此您必须为此编写一个#function

<#function getById(idNamePairs, id)>
  <#local found = false>
  <#list idNamePairs as idNamePair>
    <#if idNamePair.id == id>
      <#if found>
        <#stop "Id not unique: ${id}">
      </#if>
      <#local name = idNamePair.name>
      <#local found = true>
    </#if>
  </#list>
  <#if !found>
    <#stop "No entry with this id: ${id}">
  </#if>
  <#return name>
</#function>

然后您可以像这样使用它:

${getById(users, "6")}