有谁知道JS中反转对象列表的效率.reverse()效率如何?
我很好奇是否有任何有意义的性能损失,用于按升序排序列表(比如100个对象)并将其反转而不是仅按降序排序列表。
编辑:所以我运行了一些测试,将数组降序排序,然后反向升序。结果非常有趣:(以铬计算)
似乎.reverse()不是一个非常昂贵的操作,特别是与sort相比。
.reverse()在O(n)中工作,这从链接的规范中可以看出。它将进行元素的成对交换。
回答你的问题:sort + reverse
不可避免地比sort
更昂贵,没有捷径(可能是双链表或其他数据结构)。
关于Array#sort
的Ecma规范是模糊的,所以答案取决于实际的实现,假设我们正在谈论V8
(Chrome,NodeJS),那么我们可以说对于具有>10
元素的列表,时间复杂度是O(n log(n))
而Array#reverse
的时间复杂度是O(n)
。
鉴于此,我们可以自信地说,直接按降序排序会更好,因为sort + reverse
显然比sort
更贵。
以后代顺序排序等于按升序排序。
更新:正如Jonas在下面的评论中所述,如果您可以注意到列表中的模式(例如列表已经过asc-sorted),那么您可能只需将其反转并保存O(n log(n))
操作即可。尝试理解数据的形状始终是性能优化的第一步。