假设有一个类似var arr = [{id:'anId', value: 'aValue'}, ......]
的数组,并按value
进行自定义排序:
arr.sort(function(){
// sorting.....
});
有没有办法在排序过程中跟踪元素?
如果没有有效的搜索实现,id
找不到它而不迭代并检查每个项目?
感谢您的帮助。
答案 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
将引用您的对象。排序数组。