javascript 是先排序后筛选更快?还是反之亦然?最优?

vxqlmq5t  于 2023-01-19  发布在  Java
关注(0)|答案(2)|浏览(138)

我有一个2000+作者的数组。我需要排序的名称,有最后,但也过滤掉任何名称,没有任何职位。
在我的脑海里,我认为先过滤,然后排序会更快。但在使用www.example.com测试时Performance.now,它们似乎是一样的?(在一个小列表(10-20个作者)上测试。

items.filter((item) => item.author.posts.total)
          .sort(function (a, b) {
            return (
              b.author.posts.total -
              a.author.posts.total
            );
          })

OR

items.sort(function (a, b) {
            return (
              b.author.posts.total -
              a.author.posts.total
            );
          })
.filter((item) => item.author.posts.total)
zf9nrax1

zf9nrax11#

对于小样本的数据,它不会改变任何东西,但是对于大样本,最好先过滤,然后再dort,因为js使用O(n log n)的快速排序(这是当今最快的算法之一),所以数据越少,速度就越快,而过滤缩小了样本的大小,所以先过滤速度更快。
希望对你有帮助!

jobtbby3

jobtbby32#

在一个小列表(10-20位作者)上进行测试。
性能测试毫无意义,除非所讨论的数据大到需要占用大量CPU来处理。Even then, they're often unreliable.
也就是说,假设数组中有大量的元素,并且数组还没有以任何方式排序,那么首先使用.filter从数组中删除不需要的元素应该比包括对它们进行不必要的排序,然后再删除它们更快。排序具有× 1 m2n1x复杂度(如果数据开始时完全未排序)。

相关问题