我有一长串聊天室
let chatRooms = {
"general": ChatRoom,
"myRoomA": ChatRoom,
"bobsRoom": ChatRoom,
...
}ChatRoom有一个serialize方法
ChatRoom.serialize = function(){
return {
name: this.name,
clients: this.clients,
...
}
}为了向用户列出所有的ChatRooms,我必须将这些数据发送给他们。
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:是否可以高效、准确地对对象进行分页。
发布于 2018-08-11 12:38:40
您可以只接受返回数组的对象的值,这样就保证了顺序:
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());https://stackoverflow.com/questions/51799685
复制相似问题