Javascript 已排序的大型对象列表

Javascript 已排序的大型对象列表,javascript,arrays,sorting,angularjs,Javascript,Arrays,Sorting,Angularjs,我需要处理一个大的对象列表(在这种情况下,是游戏中的精灵),按照特定的顺序,由它们的一个属性决定(在这种情况下,精灵的zIndex)。我以随机顺序一个接一个地获取对象,但离完美对象不远 目前,我天真地将获取的每个对象推送到一个数组中,并在操作之前对其进行排序(使用AngularJS过滤器)。但是操作非常慢(占总计算时间的50%)。我可以做些什么来加快这个过程 我尝试使用稀疏数组,其键是我对象的zIndex,但出于一个神秘的原因: 在稀疏数组中速度非常慢 当我使用对数组进行迭代时,顺序似乎没有得

我需要处理一个大的对象列表(在这种情况下,是游戏中的精灵),按照特定的顺序,由它们的一个属性决定(在这种情况下,精灵的
zIndex
)。我以随机顺序一个接一个地获取对象,但离完美对象不远

目前,我天真地将获取的每个对象推送到一个数组中,并在操作之前对其进行排序(使用AngularJS过滤器)。但是操作非常慢(占总计算时间的50%)。我可以做些什么来加快这个过程

我尝试使用稀疏数组,其键是我对象的
zIndex
,但出于一个神秘的原因:

  • 在稀疏数组中速度非常慢
  • 当我使用
    对数组进行迭代时,顺序似乎没有得到保留。。。在
    循环中

如何使用
array.sort()
。您离本机浏览器JavaScript越近,访问速度就越快


请看

我不会使用
来。。。在
循环中。来自Mozilla:

以任意顺序迭代对象的可枚举属性。

用于。。。in
通常会按照定义数组属性的顺序迭代数组,这就是排序不起作用的原因。不确定它是否能解决您的问题,但执行
var i=0,l=items.length;for(;i
将保留数组顺序,并且很可能是最快的方法,因为它使用本机javascript


如果这是您面临的唯一问题,并且使用稀疏数组可以解决这一问题,那么它应该很好。

但它意味着对(非常)稀疏数组的所有键进行迭代(因为
zIndex
根本不是连续的),这将导致巨大的开销,不是吗?问题是:如何仅迭代数组的定义值并在操作期间保持顺序?哇!我没想到
angular.orderBy
Array.sort
之间有这么大的区别!我想,最简单的解决方案总是最好的……谢谢你简单而有效的回答:)。