Фильтровать массив по значению - PullRequest
0 голосов
/ 25 сентября 2018

Скажем, у меня есть неупорядоченный массив с именем users:

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

Есть ли способ получить пользователя с id == 2 в моем шаблоне MVEL (или Freemarker)?Если нет или несколько, то выбросить ошибку.Это кажется возможным с @foreach, но я бы предпочел более краткий.

1 Ответ

0 голосов
/ 25 сентября 2018

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")}
...