返回一个元素已经进行了排序的 Array 对象。
arrayobj.sort(sortfunction)
arrayObj
必选项。任意 Array 对象。
sortFunction
可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。
sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。
如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:
var o = [6,2,4,5,3,1];
var l = o.sort();①
document.write(l);
输出是1,2,3,4,5,6。var l = o.sort(function(a,b){return a - b});
而如何将排序变成降序,其实很简单是把①中的语句改成:var l = o.sort(function(b,a){return a - b});sort方法,不止对数字能排序,对于英文,和中文都能排序,例如:
var o = [d,c,a,e,f,b];
var l = o.sort();
document.write(l);
输出应该是,a,b,c,d,e,f;var o = ["广州","深圳","东莞","中山","顺德","佛山"];
var l = o.sort();
document.write(l);
输出的结果是: 东莞,中山,佛山,广州,深圳,顺德 ;var o = ["广州","深圳","东莞","中山","顺德","佛山"];
var compareData = { "东莞" : 1, "佛山" : 2, "广州" : 3, "深圳" : 4, "顺德" : 5, "中山" : 6 };
var l = o.sort(function(a,b){return compareData[a]- compareData[b]});
document.write(l);
这样子,输出的结果,就是 :东莞,佛山,广州,深圳,顺德,中山 ;var o = [{id : 007, type : "广州"}, {id : 005, type : "深圳"}, {id : 008, type : "东莞"}, {id : 003, type : "中山"}, {id : 002, type : "深圳"}, {id : 006, type : "佛山"}]; var compareData = { "东莞" : 1, "佛山" : 2, "广州" : 3, "深圳" : 4, "顺德" : 5, "中山" : 6 }; l = o.sort(function compare(a,b){return compareData[a.type] - compareData[b.type];}); for(var i = 0; i < l.length; i++){ document.write(l[i]["type"]); }
通过上面两个例子,我们应该清楚明白,其实a,或者b,或者你定义的参数都是要排序的数组的元素。
var o = [{id : 007, type : "广州"}, {id : 005, type : "深圳"}, {id : 008, type : "东莞"}, {id : 003, type : "中山"}, {id : 002, type : "深圳"}, {id : 006, type : "佛山"}];
var compareString = "东佛广深顺中";
var l = o.sort(function compare(a,b){
return compareString.indexOf(a.type.substr(0,1)) - compareString.indexOf(b.type.substr(0,1));
});
for(var i = 0; i < l.length; i++){
document.write(l[i]["type"]);
}
像是这样,如果我加个河源,只有把compareString的值,改成“ 东佛广河深顺中”就能,把河源排序了。
其实这个例子比较粗糙的,因为只是比较第一个字,其实可以当两个词的第一个字相同的话,可以比较第二个字,用递归的算法和闭包可以现实比较完全部字,这在乎你有没有必要全部比较。