我需要处理一个大对象列表(在这种情况下,游戏中的精灵)按特定顺序,由其中一个属性决定(在case,精灵的zIndex
。我以随机顺序逐个获取对象,但距离完美对象不远。
此刻,我天真地推动我在数组中获取的每个对象,并在操作之前对其进行排序(使用AngularJS的orderBy
过滤器)。但操作非常缓慢(占总计算时间的50%)。我该怎么做才能加快这个过程?
我尝试使用稀疏数组,其键是我的对象的zIndex
,但出于一个神秘的原因:
angular.forEach
在稀疏数组上非常慢,for ... in
循环遍历数组时,似乎没有保留顺序。答案 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的最快方式。
如果这是您遇到的唯一问题,并且使用稀疏数组可以解决这个问题,那么应该没问题。