首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meteor中的自定义排序

Meteor中的自定义排序
EN

Stack Overflow用户
提问于 2015-11-11 09:56:21
回答 1查看 223关注 0票数 0

我基本上是在尝试创建自己的排名系统,并希望根据排名最高的用户到排名最低的用户来显示用户。例如,假设我有一个用户集合:

代码语言:javascript
复制
{_id: "CwqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "AcqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "hrqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "DsfaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "fdsqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}}

我希望能够编写一个函数和排名上述用户,理想情况下通过这些用户,并添加一个排名属性(在客户端)的基础上一个函数。例如:

代码语言:javascript
复制
if(Meteor.user.profile.name == "Bob"){
  // Add 5 to the rank property
}else if(Meteor.user.profile.job == "Business Man"){
  // Add 5 more to the rank property    
}

// Now users have rank property added to them based on the function above
{_id: "CwqaMwgyRNa3G99HD",rank: 5, createdAd: Fri Oct 30, profile: {...}},
{_id: "AcqaMwgyRNa3G99HD", rank: 10, createdAd: Fri Oct 30, profile: {...}},
{_id: "hrqaMwgyRNa3G99HD", rank: 5, createdAd: Fri Oct 30, profile: {...}},
{_id: "DsfaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}},
{_id: "fdsqaMwgyRNa3G99HD", createdAd: Fri Oct 30, profile: {...}}

最后,我想首先显示客户端上排名最高的用户。因此,理想情况下,排名为10的ID将显示排名为5的2,然后显示其余的ID。你知道怎么做吗?我会理想地希望这是在客户端完成,因为我只需要这是显示在客户端,而不是存储在mongo中。我会为此使用会话吗?如果是这样的话,我不太确定如何进行这样的会话。谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2015-11-11 10:38:10

您可以尝试使用collection.forEach方法计算排名,并使用_.sortBy对结果文档进行排序。

例如,你可以像这样定义一个模板帮助器:

代码语言:javascript
复制
Template.rankings.helpers({
  user: function() { 
    var rankings = [];
    var sorted;

    Meteor.users.find().forEach(function(user, index) {
      var rank = 0;
      if(user.profile.name == "Bob"){
        rank = rank + 5;
      }
       if(user.profile.job == "Business Man"){
        // Add 5 more to the rank property    
        rank = rank + 5
      } 
      user.rank = rank;
      rankings.push(user); 
    }):

    sorted = _.sortBy(rankings, rank);
    return sorted;

   }
});

然后遍历模板中的排序列表,如下所示:

代码语言:javascript
复制
<template name="rankings">
  {{#each user}} 
    {{rank}}, {{profile.name}}, {{profile.job}}
  {{/each}}
</template>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33643022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档