Question: I have a problem, I seeked help in #documentcloud on Freenode and got some suggestions but still hasn't helped me fix my problem.

Basically I have a collection, very large up to 2-3 thousand items, and it -has- to be sorted, however it only has to be sorted at certain times. Using a comparator function is fine, it keeps it sorted, but takes a lot longer when all the items are being added to the collection, as it's resorting the entire collection each time one of the 2-3000 items are added.

I've tried a couple of suggestions, one being:

```
collection.comparator = function(object) { object.get('sortBy'); };
collection.sort();
collection.comparator = undefined;

```

This fails miserably and doesn't sort at all, I've also tried using `collection.sortBy(...)` this seems to return the sorted collection, but it is of no use to me as when I try `collection = collection.sortBy(...)` it just dumps the sorted collection as an array into the variable `collection`. When I try to use collection functions or utilities I get errors like .each is undefined for collection, etc.

Any ideas?

Answer: 
This can't be done simply because Collection.sort actually calls Collection.comparator.

You have basically three options 

### Option One

You could force your sort method without comparator to the models itself ( basically the same as calling .sort of your collection, but without .comparator

```
// in your collection class

_comparator: function(a,b) { /* comparator code */ }

sorter: function() {
   // Of course you should bind this to your collection at this function 
   // and your comparator

   this.models.sort( _comparator ) // .models gives you the array of all models
}

```

### Option Two

Remove comparator each time you add something to the collection

```
_comparator = function(a,b) { /* comparator code */ }
collection.comparator = undefined
collection.fetch({ success: function() { collection.comparator = _comparator })

```

### Options Three

If you think a little bit ahead of your code, and simply want your collection sorted only because you want to display it this way, you could simply sort it on display

```
collection.returnSorted = function () { return collection.sortBy( _comparator ) }

```
Would it work to use [`_.sortedIndex()`](http://underscorejs.org/#sortedIndex) when individual items are added to the already sorted list? 

You could easily figure out the `sortedIndex`, `slice` the list based on that index, then `splice`: part1 + new\_entry + part2.

This keeps you from sorting the entire list every time. You're just inserting one new entry in the right spot.

My answer assumes you're already able to do an initial sort of the 2000+ item collection, and that you're just trying to overcome the issue of resort when new items are added one at a time. Your question lacks specificity about exactly where your issue is though.