如何在 sails js 中使用对象的键对记录进行排序

How to sort records using object's key in sails js

你好朋友我正在使用 sails js 编写 web 服务。我正在获取所有帖子并收到以下回复:

[
  {
     id: "559458c51ccc9c716dabf666",
     comments : [],
     liked : {
         data : [
            { 
              id: "559458c51eee9c716dabf666",
              username : "abc"
            },
            { 
              id: "559458c51eee9c716dabf111",
              username : "xyz"
            }
         ],
         count : 2
     }
  },

  {
     id: "559458c51ccc9c716dabf666",
     comments : [],
     liked : {
         data : [
            { 
              id: "559458c51eee9c716dabf666",
              username : "abc"
            },
            { 
              id: "559458c51eee9c716dabf666",
              username : "pqr"
            },
            { 
              id: "559458c51eee9c716dabf111",
              username : "xyz"
            }
         ],
         count : 3
     }
  }
]

我想使用喜欢的帖子数对以上记录进行排序。在上面的回复中,我们得到的赞数为 liked { data : [], count : 2}.

我是这样做的:

getPost: function(callback) {
        Posts.find().sort('liked.count desc').populateAll().exec( function (err, posts) {
            if(err) {
                return callback({error:err, code:500});
            }
            if (posts) {
                callback(null,posts);
            }

        });
    }

如何使用 liked : {}

中的 count 对帖子进行排序

我已经从 getPost 中删除了 sort('liked.count desc')

getPost: function(callback) {
        Posts.find().populateAll().exec( function (err, posts) {
            if(err) {
                return callback({error:err, code:500});
            }
            if (posts) {
                callback(null,posts);
            }

    });
}

在控制器中,我在 getPost 上面调用,如下所示:

getTopTip : function (req,res) {
        Posts.getPost(function (err,tips) {
            if(err) {
                return res.notFound();
            }

            // console.log(tips);
            res.json({'count':tips.length, 'data':tips});

        });
    }

我使用 console.log 检查了响应,我得到了如下响应:

[
  {
     id: "559458c51ccc9c716dabf666",
     comments : [],
     likes : [
            { 
              id: "559458c51eee9c716dabf666",
              username : "abc"
            },
            { 
              id: "559458c51eee9c716dabf111",
              username : "xyz"
            }
         ]
  },

  {
     id: "559458c51ccc9c716dabf666",
     comments : [],
     likes :  [
            { 
              id: "559458c51eee9c716dabf666",
              username : "abc"
            },
            { 
              id: "559458c51eee9c716dabf666",
              username : "pqr"
            },
            { 
              id: "559458c51eee9c716dabf111",
              username : "xyz"
            }
         ]
  }
]

我在调用 getPost 的控制器中编写了一个排序函数。该函数如下所示:

function sortByKey(array, key) {
    return array.sort(function(a, b) {
        var x = a[key]; var y = b[key];
        return ((x > y) ? -1 : ((x < y) ? 1 : 0));
    });
} 

并且在 getTopTip 中我调用了这个排序函数,如下所示:

getTopTip : function (req,res) {
        Posts.getPost(function (err,tips) {
            if(err) {
                return res.notFound();
            }
            if(tips) {
                tips = sortByKey(tips, 'likes')
                res.json({'count':tips.length, 'data':tips});
            }
        });
    }

并且有效。我有降序排列的帖子。