在已排序的数组中查找/跟踪元素

时间:2015-01-19 18:21:20

标签: javascript arrays sorting search

假设有一个类似var arr = [{id:'anId', value: 'aValue'}, ......]的数组,并按value进行自定义排序:

arr.sort(function(){
   // sorting.....
}); 

有没有办法在排序过程中跟踪元素?

如果没有有效的搜索实现,id找不到它而不迭代并检查每个项目?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

由于您已经应用了将遍历所有元素的排序方法,因此您可以通过在排序迭代期间检查目标ID来获得最佳性能:

var prevPos = // here goes the current index of the object in the array
var item;
arr.sort(function(a,b){
    if(a.id == 'mySearchID'){
        console.log('found it, better store it')
        item = a;
        f(a.value < b.value) prevPos++ // item moved, change current pos
    }else if(b.id == 'mySearchID'){
         console.log('found it, better store it')
         item = b;
         if(a.value < b.value) prevPos-- // item moved, change current pos
    }
    //your sorting method
    return a.value < b.value
}); 
console.log(item, prevPos) //gets item obj and its new position in the array

请注意,item可能会多次更新,具体取决于在排序过程中移动所需对象的次数,但在排序结束时item将引用您的对象。排序数组。