Array中的srot()方法

  sort()方法是用来重排序的方法。在默认情况下,sort()方法按升序排列数组项----即最小的值位于最前面,最大的值排在最后面。

  我们看看官方是怎么说的:

  arrayObj.srot(sortFunction)

参数

  arrayObj

  必选项。任意Array对象

  sortFunction

  可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照ASCII字符串进行升序排列。

说明

  sort()方法将Array对象进行适当的排序,在执行过程中并不会创建新的Array对象。

  如果sort()方法里传入的是函数,那么数组就会根据传入的函数排列,该函数必须返回下列值之一:

  • 如果所传递的第一个参数比第二个参数小,则返回负值。
  • 如果第一个参数比第二个参数大,则返回正值。
  • 如果两个参数相等,则返回0。

 var values = [0, 1, 5, 10, 15];
values.sort(); //调用sort()方法
console.log(values); //0, 1, 10, 15, 5

  如上,在字符串比较时 ”10” 位于 “5” 的前面,于是输出结果10 在5 的前面。sort()方法会调用每个数组项的toString()转型方法(即把要排序的内容转化为string),然后按照字符串的第一位(从右到左)的ASCII码先后顺序进行比较,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串。

所以说,sort()方法这种排序方式在很多情况下都不是最佳方案。因此sort()方法可以接收一个比较函数作为参数,以便避免上面这种结果。
 /*compare函数*/
function compare(value1, value2) {
//return value1 - value2;
if(value1 < value2) {
return -1;
} else if(value1 > value2) {
return 1;
} else {
return 0;
}
} var values = [0, 1, 10, 15, 5];
values.sort(compare); //values调用sort()方法,然后传入并引用compare函数,然后返回compare的参数(负值,正值,0)。
console.log(values); //0, 1, 5, 10, 15

  如上,比较函数compare接收数组values的两个参数,value1 < value2 则返回 -1;value1 > value2 则返回 1;反之则返回 0;

对于数值类型或者其valueOf()方法会返回数值类型的对象类型,也可以把比较函数compare简单化,如下

 function compare(value1, value2){
return value2 - value1;
}

  由于比较函数是通过返回一个小于零、等于零或大于零的值来影响排序结果,因此减法操作就可以适当处理所有这些情况。

小结

  1. sort()方法单独引用并不稳定和严谨,所以sort()方法可以返回一个比较函数来作为参数。

  2. 在sort()方法引用比较函数时,必须满足返回三个数值(负值,正值,零)。

  3. 日常打卡(1/1)

js-2018-11-09 关于Array中的srot()方法和compare()方法的更多相关文章

  1. JavaScript -- Array中的push()方法和concat()方法介绍

    Array => push()方法向数组的末尾添加一个或者多个元素,也就是说它会改变数组本身 concat() => concat()方法用于连接2个或者多个数组,但它的特殊之处在于,它会 ...

  2. js中的splice方法和slice方法简单总结

    slice:是截取用的 splice:是做删除 插入 替换用的 slice(start,end): 参数: start:开始位置的索引 end:结束位置的索引(但不包含该索引位置的元素) 例如: va ...

  3. JS中的call()方法和apply()方法用法总结

    原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的call()方法和app ...

  4. JS中的call()方法和apply()方法用法总结(挺好 转载下)

    最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...

  5. Java8新特性(一)_interface中的static方法和default方法

    什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...

  6. interface中定义default方法和static方法

    interface的default方法和static方法 接口中可以定义static方法,可通过接口名称.方法名()调用,实现类不能继承static方法: 接口中可以定义default方法,defau ...

  7. TP框架中的A方法和R方法

    ThinkPHP 跨模块调用操作方法(A方法与R方法) 跨模块调用操作方法 前面说了可以使用 $this 来调用当前模块内的方法,但实际情况中还经常会在当前模块调用其他模块的方法.ThinkPHP 内 ...

  8. Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍

    在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: ...

  9. java 中的set方法和get方法的理解

    get的意思是获取,set的意思是设置. get方法和set方法是实现类的封装访问的很好的工具. 当类中的变量设为private 时,他的意思就是说,只能通过自身和子类的访问,但是对于别的其他的类来说 ...

随机推荐

  1. Android:创建无标题栏的Activity

    上图是一个带标题栏的Activity.有些时候我们希望能去除这个标题栏,做法如下: 1. 在res/values目录下面创建styles.xml.如果你已经有这个文件了,那么直接打开这个文件,添加如下 ...

  2. ioctl在socket中的一些用法及示例

    原文: http://blog.chinaunix.net/uid-20692625-id-3172833.html ----------------------------------------- ...

  3. leetcode第一刷_Minimum Window Substring

    好题.字符串.线性时间. 我认为第一次拿到这个题的人应该不会知道该怎么做吧,要么就是我太弱了..先搞清楚这个题要求的是什么.从一个长字符串中找一个字串,这个字串中的字符全然包括了另一个给定目标串中的字 ...

  4. 一条SQL语句求前面记录的平均值

    有算法要求如下: For (i=1,i<=10,i++) { ta[i] = (t[1] + t[2] + ... + t[i]) / i; } 用一条SQL语句实现它: 分别用表变量 @ta ...

  5. Android 重写onBackPressed()方法 遇到的问题

    1.resultCode的值一直为0 问题描述:AActivity调用startActivityForResult()方法,启动BActivity,然后在BActivity的onBackPressed ...

  6. rk3288对于parameter参数文件的解析处理【转】

    本文转载自:http://blog.csdn.net/groundhappy/article/details/56479694 rk3288有一个parameter文件. 类似于 FIRMWARE_V ...

  7. hdoj--1220--Cube(数学推导)

    Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. [POJ 2536] Gopher ||

    [题目链接] http://poj.org/problem?id=2536 [算法] 匈牙利算法解二分图最大匹配 [代码] #include <algorithm> #include &l ...

  9. [AtCoder3954]Painting Machines

    https://www.zybuluo.com/ysner/note/1230961 题面 有\(n\)个物品和\(n-1\)台机器,第\(i\)台机器会为第\(i\)和\(i+1\)个物品染色.设有 ...

  10. PCB 线路板人生

    由此开端,增加PCB人生分类栏,后续在此分享PCB 非工作方面所思所想,由于文笔不好,请指正.