Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象内分页对象_Javascript - Fatal编程技术网

Javascript 在对象内分页对象

Javascript 在对象内分页对象,javascript,Javascript,我有一长串聊天室 let chatRooms = { "general": ChatRoom, "myRoomA": ChatRoom, "bobsRoom": ChatRoom, ... } 聊天室有一个序列化方法 ChatRoom.serialize = function(){ return { name: this.name, clients: this.clients, ... } } 为了向用户列出所有聊天室

我有一长串聊天室

let chatRooms = {
   "general": ChatRoom,
   "myRoomA": ChatRoom,
   "bobsRoom": ChatRoom,
   ...
}
聊天室
有一个
序列化
方法

ChatRoom.serialize = function(){
    return {
      name: this.name,
      clients: this.clients,
      ...
   }
}
为了向用户列出所有聊天室,我必须将这些数据发送给他们

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

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

  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());

将房间名称按您喜欢的顺序排列。