【问题标题】:How do I sort items in an object in Freemarker如何在 Freemarker 中对对象中的项目进行排序
【发布时间】:2018-01-23 02:18:39
【问题描述】:

Freemarker 中内置的 sort 和 sort_by 用于列表。如何在 Freemarker 中对对象进行排序?

<#assign myObject = {
    'item1':{'name': 'Name One', 'url': 'https://www.one.com, 'order': 1},
    'item2':{'name': 'Name Two', 'url': 'https://www.two.com, 'order': 2},
    'item3'...
}/>


<#macro displayobjectLinks>
    <ul>
        <#list objectLinks?keys as info>
            <#if (info != "item1")>
                <li><a href="${objectLinks[info].url}">${objectLinks[info].name}</a></li>
            </#if>
        </#list>
    </ul>
</#macro?

如何根据“订单”按顺序显示?
我还需要访问我的对象(item1,item2...)的键,因为我正在基于它做一些事情。

【问题讨论】:

  • 你能改变myObject 的外观吗?最好的办法是如果你当然已经对其进行了排序......但除此之外,它不能是像[ {'info': 'item1', 'name': 'Name One', 'url': 'http://...'}, ...] 这样的对象列表吗?也就是一个对象列表,每个对象都有你需要的属性。
  • 我可以改变它。谢谢!

标签: freemarker


【解决方案1】:

你的对象是一个哈希,内置了values,它返回一个序列,可以是sorted。因此,您可以执行以下操作:

<#list myObject?values?sort_by("name") as item>
</#list>

请注意,虽然并非所有哈希都支持这一点,但你会没事的。

【讨论】:

  • 谢谢!我还需要访问我的对象(item1,item2 ...)的密钥,因为我正在基于它做一些事情。用它更新问题。
  • 请注意,?values 不一定是一个序列,它可能只是一个类似Iterable 的值,而?sort_by 不支持排序。使用?values?sequence 确保该值是一个序列。
【解决方案2】:

排序方式

返回按给定哈希子变量升序排序的哈希序列。 (降序使用 this 然后 reverse 内置。)规则与内置 sort 相同,只是序列的子变量必须是哈希,并且您必须给出哈希子的名称将决定顺序的变量。例如:

在您的情况下,您可以使用以下代码:

#list>

【讨论】:

    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2012-05-21
    • 2015-04-11
    • 1970-01-01
    相关资源
    最近更新 更多