Compare Revisions

Array.prototype.sort()

Revision 528:

Revision 528 by rodneyrehm on

Revision 529:

Revision 529 by rodneyrehm on

Title:
Array sort method
Array sort method
Slug:
JavaScript/Reference/Global_Objects/Array/sort
JavaScript/Reference/Global_Objects/Array/sort
Tags:
Array
Array
Content:

Revision 528
Revision 529
tt227    <h3 name="See_Also">
228      Example: Sorting Maps
229    </h3>
230    <p>
231      The <code>compareFunction</code> can be invoked multiple ti
 >mes per element within the array. Depending on the <code>compareF
 >unction</code>'s nature, this may yield a high overhead. The more
 > work a <code>compareFunction</code> does and the more elements t
 >here are to sort, the wiser it may be to consider using a map for
 > sorting. The idea is to walk the array once to extract the actua
 >l values used for sorting into a temporary array, sort the tempor
 >ary array and then walk the temporary array to bring the original
 > array into the right order.
232    </p>
233    <pre class="eval">
234// the array to be sorted
235var list = ["Delta", "alpha", "CHARLIE", "bravo"];
236// temporary holder of position and sort-value
237var map = [];
238// container for the resulting order
239var result = [];
240 
241// walk original array to map values and positions
242for (var i=0, length = list.length; i &lt; length; i++) {
243  map.push([    
244    // remember the index within the original array
245    i, 
246    // evaluate the value to sort
247    list[i].toLowerCase()
248  ]);
249}
250 
251// sorting the map containing the reduced values
252map.sort(function(a, b) {
253  // a[0] contains the original array-index
254  // a[1| contains the value to sort
255  return a[1] &gt; b[1] ? 1 : -1;
256});
257 
258// copy values in right order
259for (var i=0, length = map.length; i &lt; length; i++) {
260  // a[0] contains the original array-index
261  // a[1| contains the value to sort
262  result.push(list[map[i][0]]);
263}
264 
265// print sorted list
266print(result);
267</pre>

Back to History