js-2018-11-09 关于Array中的srot()方法和compare()方法
array中的srot()方法
sort()方法是用来重排序的方法。在默认情况下,sort()方法按升序排列数组项----即最小的值位于最前面,最大的值排在最后面。
我们看看官方是怎么说的:
arrayobj.srot(sortfunction)
参数
arrayobj
必选项。任意array对象
sortfunction
可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照ascii字符串进行升序排列。
说明
sort()方法将array对象进行适当的排序,在执行过程中并不会创建新的array对象。
如果sort()方法里传入的是函数,那么数组就会根据传入的函数排列,该函数必须返回下列值之一:
- 如果所传递的第一个参数比第二个参数小,则返回负值。
- 如果第一个参数比第二个参数大,则返回正值。
- 如果两个参数相等,则返回0。
1 var values = [0, 1, 5, 10, 15]; 2 values.sort(); //调用sort()方法 3 console.log(values); //0, 1, 10, 15, 5
如上,在字符串比较时 ”10” 位于 “5” 的前面,于是输出结果10 在5 的前面。sort()方法会调用每个数组项的tostring()转型方法(即把要排序的内容转化为string),然后按照字符串的第一位(从右到左)的ascii码先后顺序进行比较,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串。
所以说,sort()方法这种排序方式在很多情况下都不是最佳方案。因此sort()方法可以接收一个比较函数作为参数,以便避免上面这种结果。
1 /*compare函数*/ 2 function compare(value1, value2) { 3 //return value1 - value2; 4 if(value1 < value2) { 5 return -1; 6 } else if(value1 > value2) { 7 return 1; 8 } else { 9 return 0; 10 } 11 } 12 13 var values = [0, 1, 10, 15, 5]; 14 values.sort(compare); //values调用sort()方法,然后传入并引用compare函数,然后返回compare的参数(负值,正值,0)。 15 console.log(values); //0, 1, 5, 10, 15
如上,比较函数compare接收数组values的两个参数,value1 < value2 则返回 -1;value1 > value2 则返回 1;反之则返回 0;
对于数值类型或者其valueof()方法会返回数值类型的对象类型,也可以把比较函数compare简单化,如下
1 function compare(value1, value2){ 2 return value2 - value1; 3 }
由于比较函数是通过返回一个小于零、等于零或大于零的值来影响排序结果,因此减法操作就可以适当处理所有这些情况。
小结
1. sort()方法单独引用并不稳定和严谨,所以sort()方法可以返回一个比较函数来作为参数。
2. 在sort()方法引用比较函数时,必须满足返回三个数值(负值,正值,零)。
3. 日常打卡(1/1)
推荐阅读
-
[python] 在 python2和3中关于类继承的 super方法简要说明
-
关于jquery中attr()和prop()方法的区别
-
js-2018-11-09 关于Array中的srot()方法和compare()方法
-
关于Object类中的wait()和notify()方法实现生产者和消费者模式
-
python2与python3中关于对NaN类型数据的判断和转换方法
-
java中关于“==”和“equals()”方法的区别
-
js中Array数组的属性和方法
-
关于ASP.NET MVC中Response.Redirect和RedirectToAction的BUG (跳转后继续执行后面代码而不结束进程)以及处理方法
-
JavaScript 中那些关于坐标和距离的属性与方法
-
关于JS中this指向和ES5中常用的方法