首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象中的分页对象

对象中的分页对象
EN

Stack Overflow用户
提问于 2018-08-11 12:28:46
回答 1查看 24关注 0票数 0

我有一长串聊天室

代码语言:javascript
复制
let chatRooms = {
   "general": ChatRoom,
   "myRoomA": ChatRoom,
   "bobsRoom": ChatRoom,
   ...
}

ChatRoom有一个serialize方法

代码语言:javascript
复制
ChatRoom.serialize = function(){
    return {
      name: this.name,
      clients: this.clients,
      ...
   }
}

为了向用户列出所有的ChatRooms,我必须将这些数据发送给他们。

代码语言:javascript
复制
ChatRoomManager.serialize = function(){
        let serializedObjects = [];
        Util.each(this.chatRooms, function(i, e){
            if(e.serialize){
                serializedObjects.push(e.serialize());
            }
        });
        return serializedObjects;
}

这成为一个性能问题,因为人们经常要求列出所有的聊天室,并且经常被序列化,所以我想进行分页。但是,如果一个对象没有保证的顺序,我怎么能说“这是接下来的10个聊天室”?即使我能够保证订单,如何才能在索引11开始时不遍历所有对象呢?想象一下,如果我在1000指数,等等。

TLDR:是否可以高效、准确地对对象进行分页。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-11 12:38:40

您可以只接受返回数组的对象的值,这样就保证了顺序:

代码语言:javascript
复制
  const ordered = Object.values(chatRooms);

您现在还可以应用自定义排序顺序,例如:

代码语言:javascript
复制
 ordered.sort((roomA, roomB) => roomA.name.localeCompare(roomB.name));

现在只序列化一个块,就像:

代码语言:javascript
复制
 let index = 0, chunk = 100;

 const result = ordered.slice(index * chunk, (index + 1) * chunk).map(room => room.serialize());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51799685

复制
相关文章

相似问题

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