深入了解Array的sort方法及使用技巧

2019-04-04 07:58:26来源:爱站网 阅读 ()

新老客户大回馈,云服务器低至5折

Array.prototype.sort方法是对数组进行排序,此方法使用函数参数指定排序规则,下面是深入了解Array的sort方法及使用技巧,跟着爱站技术频道小编带你来了解一下吧!
我们先来看看sort?的简单应用:


var?arr=[2,1,3,4];
alert(arr.sort())??//?[1,2,3,4]?从小到大排列

//现在由大到小排列??得到?[4,3,2,1]
alert(arr.sort(function(left,right){return?left>right?-1:1}))

//这里,sort方法通过参数函数的返回值?1或者-1来决定是顺排还是倒排

还记得我以前和大家说过的?利用?Function.apply?方法来获取数组中的最大元素的方法吗?
文中用了两种不同的方法来获取数组中的最大值.
现在?sort也可以来秀一下了.

var?arr=[2,1,3,4];
var?minValue=arr.sort()[0];
var?maxValue=arr.sort()[arr.length-1]???//??arr.sort().pop()

?怎么样,这也是一种另类实现方法吧,还不用写循环遍历.?
不过,我必须要指出的是,这种方法的效率是最低的,对于几十个百来个元素的数组,你还是可以使用这种技巧.
但是,如果数组很大,用?sort()方法可以慢得让你想抽烟

进一步讨论?sort?对复杂数据结构的排序.
1.?对多维数组的排序


var?arr=[
?????????????[2,1,55,4],
?????????????[5,3,22,3],
?????????????[1,2,77,2],
?????????????[9,4,33,5],
??????????];?????????????????
alert("默认按第一列排\n"+arr.sort().join("\n"))??
alert("现在按第三列排\n"+arr.sort(function(left,right){return?left[2]>right[2]?1:-1}).join("\n"))??
alert("现在按第三列倒排\n"+arr.sort(function(left,right){return?left[2]>right[2]?-1:1}).join("\n"))??
2.对复杂数据结构的排序

Array.prototype.each=function(f){for(var?i=0;i<this.length;i++)?f(this[i],i,this)}
function?showName(item){alert(item.name)};?//打印名字

var?arr=[
?????????????{name:"bill",money:500},
?????????????{name:"go_rush",money:400},
?????????????{name:"dudu",money:9000}
??????????];?????????????????
//依次显示?dudu,bill,go_rush?看来dudu是最有钱的,而我是最穷的
arr.sort(function(left,right){return?left.money>right.money?-1:1}).each(showName)?

?3.对表格的排序,这个话题我昨天和大家聊过了.??
参见:
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html

?更复杂的表格排序(也是用Array的sort函数):?
http://community.csdn.net/expert/Topicview2.asp?id=5174915


?4.?Protype.js?中对?sort有一个构思非常巧妙的扩展,先看他的代码

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???},


?这个?sortBy?允许传入一个函数,?并把数组的每一个元素作为参数执行该函数,最后对函数返回的结果排序.
下面我来分解他的这个函数.
collect方法实际就是?map方法.相当于
Array.prototype.map=function(f){
???????for(var?i=0;ret=[];i<this.length;i++)??ret[i]=f(this[i],i,this)
??????return?ret
}

?比如,现在?
arr=[2,1,4,3]
iterator=function(x){return?x*x}

1-3行代码就得到了这样一个数组?
[
???{value:2,criteria:4},
???{value:1,criteria:1},
???{value:4,criteria:16},
???{value:3,criteria:9}
]

4-6行代码就对数组按?criteria:进行排序,由小到大.排完得到
[
???{value:1,criteria:1},
???{value:2,criteria:4},
???{value:3,criteria:9},
???{value:4,criteria:16}
]

第7行代码最简单了,取每个元素的value属性,最终得到?[1,2,3,4]??实现对arr的sortBy(function...)排序

上面是爱站技术频道小编的经验之谈,希望对你了解有所帮助,有任何问题都可以给小编留言,小编会在第一时间回复大家的问题。


原文链接:https://js.aizhan.com/develop/JavaScript/5161.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:教你html读出文本文件内容的方法

下一篇:详解jscript.encode代码的asp函数