【问题标题】:How to return a viewEntryCollection in random order如何以随机顺序返回 viewEntryCollection
【发布时间】:2017-12-07 12:00:23
【问题描述】:

我有以下代码

var vec:ViewEntryCollection = database.getView("view").getAllEntriesByKey("Mykey",true)

如何使用 SSJS(或 java)以随机顺序制作“vec”,以便每次都能获得新订单?

【问题讨论】:

  • 收藏有多大?
  • 嗯,不确定,它可能很大,但不太可能,可能少于 200 个条目。如果它变得更容易,那么不返回整个集合就足够了。只需要以随机顺序返回 10 个条目
  • 如果您只需要返回所有条目的一小部分,那么我不建议对整个集合进行洗牌/重新排序。您可以简单地在循环中使用vec.getNthEntry(Math.floor(Math.random()*vec.getCount())); 来获取您想要返回的随机条目的数量。如果您想防止返回重复的条目,您当然必须跟踪已经采用的条目(例如,通过将已采用的条目保存在以索引为键的简单 SSJS 对象中)。
  • 请问这有什么用例?
  • 是的,你可以 :-) 这些条目是我需要随机显示的照片

标签: random xpages serverside-javascript


【解决方案1】:

如何在视图中使用公式为@Unique 的辅助排序列。每次都需要刷新视图,如果视图很大,性能可能不会很好。

【讨论】:

  • 无法更改视图,抱歉
【解决方案2】:

考虑到平均集合大小,我会遍历集合并将每个项目添加到 Java 列表或 JavaScript 数组中。

如果你使用 Java you can use Collections.shuffle.

如果你使用 JavaScript you can use well established functions/algorithms

【讨论】:

    【解决方案3】:

    为了获得更好的性能,不要将集合条目保留在内存中。首先,从您的视图中创建 UNID 列表/数组。那将是最慢的部分。然后选择任何随机数并从列表/数组中选择所需数量的 UNID。调用 getDocumentByUnid 或初始化(比如 10 个)数据源。

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 2010-11-10
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 2018-12-13
      • 2017-10-13
      相关资源
      最近更新 更多