排序大型对象列表

时间:2013-11-11 22:06:40

标签: javascript arrays sorting angularjs

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

此刻,我天真地推动我在数组中获取的每个对象,并在操作之前对其进行排序(使用AngularJS的orderBy过滤器)。但操作非常缓慢(占总计算时间的50%)。我该怎么做才能加快这个过程?

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

  • angular.forEach在稀疏数组上非常慢,
  • 当我使用for ... in循环遍历数组时,似乎没有保留顺序。

2 个答案:

答案 0 :(得分:1)

使用array.sort()怎么样?你越接近原生浏览器JavaScript,你就会越快。

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

答案 1 :(得分:0)

我不会使用for ... in循环。来自Mozilla:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

Iterates over the enumerable properties of an object, in arbitrary order.

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

如果这是您遇到的唯一问题,并且使用稀疏数组可以解决这个问题,那么应该没问题。