The Array.prototype.sort method is to sort the array. This method takes a function parameter to specify the sorting rule.
Let's first look at the simple application of sort:
var arr=[2,1,3,4];
alert(arr.sort()) // [1,2,3,4] Arrange from small to large
// Now arrange from large to small to get [4,3,2,1]
alert(arr.sort(function(left,right){return left>right?-1:1}))
//Here, the sort method uses the return value 1 or -1 of the parameter function to decide whether to sort in order or in reverse order
. Remember what I told you before about using the Function.apply method to get the largest element in an array?
The article uses two different methods to obtain the maximum value in an array.
Now sort can also show off.
var arr=[2,1,3,4];
var minValue=arr.sort()[0];
var maxValue=arr.sort()[arr.length-1] // How about arr.sort().pop()
? This is also an alternative implementation method. There is no need to write a loop traversal.
However, I must point out that this method is the least efficient. You can still use this technique for arrays with dozens or hundreds of elements.
However, if the array is very large, using the sort() method can be so slow that it makes you want to smoke
. Further discussion of sort sorts complex data structures.
1. Sorting multidimensional arrays
var arr=[
[2,1,55,4],
[5,3,22,3],
[1,2,77,2],
[9,4,33,5],
];
alert("Default sorted by first columnn"+arr.sort().join("n"))
alert("Now sort by the third columnn"+arr.sort(function(left,right){return left[2]>right[2]?1:-1}).join("n"))
alert("Now sort in reverse order by the third columnn"+arr.sort(function(left,right){return left[2]>right[2]?-1:1}).join("n") )
2. Sort complex data structures
Array.prototype.each=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)}
function showName(item){alert(item.name)}; //Print name
var arr=[
{name:"bill",money:500},
{name:"go_rush",money:400},
{name:"dudu",money:9000}
];
//Display dudu, bill, go_rush in order. It seems that dudu is the richest and I am the poorest.
arr.sort(function(left,right){return left.money>right.money?-1:1}).each(showName)
3. Sorting the table, I talked about this topic with everyone yesterday.
See also:
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html
More complex table sorting (also using Array’s sort function):
http://community.csdn.net/expert/Topicview2.asp?id=5174915
4. There is a very clever extension to sort in Protype.js. Let’s look at its code first:
1 sortBy: function(iterator) {
2 return this.collect(function(value, index) {
3 return {value: value, criteria: iterator(value, index)};
4 }).sort(function(left, right) {
5 var a = left.criteria, b = right.criteria;
6 return a < b ? -1 : a > b ? 1 : 0;
7 }).pluck('value');
8},
This sortBy allows you to pass in a function, execute the function with each element of the array as a parameter, and finally sort the results returned by the function.
Let me break down his function below.
The collect method is actually the map method. It is equivalent to
Array.prototype.map=function(f){
for(var i=0;ret=[];i<this.length;i++) ret[i]=f(this[i],i,this)
return ret
}
For example, now
arr=[2,1,4,3]
iterator=function(x){return x*x}
You can get such an array in 1-3 lines of code
[
{value:2,criteria:4},
{value:1,criteria:1},
{value:4,criteria:16},
{value:3,criteria:9}
]
4-6 lines of code sorts the array according to criteria: from small to large. After sorting, we get
[
{value:1,criteria:1},
{value:2,criteria:4},
{value:3,criteria:9},
{value:4,criteria:16}
]
Line 7 of the code is the simplest. It takes the value attribute of each element and finally gets [1,2,3,4] to implement sortBy(function...) for sorting arr.
Maybe my language expression ability is limited. When I talk about sortBy in prototype.js, I just don’t know how to express it in words.
I'm really sorry that everyone has to work so hard to read the explanation code I wrote!
http://www.cnblogs.com/ashun/archive/2006/12/01/sort_sortby_array_prototype.html