在对象内分页对象

时间:2018-08-11 12:28:46

标签: javascript

我的聊天室列表很长

let chatRooms = {
   "general": ChatRoom,
   "myRoomA": ChatRoom,
   "bobsRoom": ChatRoom,
   ...
}

ChatRoom具有serialize方法

ChatRoom.serialize = function(){
    return {
      name: this.name,
      clients: this.clients,
      ...
   }
}

为了将所有ChatRoom列出给用户,我必须将此数据发送给他们

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:是否可以高效,准确地对对象进行分页。

1 个答案:

答案 0 :(得分:1)

coulf只是获取返回数组的对象的值,因此可以保证顺序:

  const ordered = Object.values(chatRooms);

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

 ordered.sort((roomA, roomB) => roomA.name.localeCompare(roomB.name));

现在只需序列化一个块就很容易了:

 let index = 0, chunk = 100;

 const result = ordered.slice(index * chunk, (index + 1) * chunk).map(room => room.serialize());