zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    nunit2.5.7 单元测试时提示:“当前不会命中断点 还没有为该文档加载任何符号”
    文件下载报错:引发类型为“System.OutOfMemoryException”的异常-.Net 内存溢出
    asp.net 访问页面访问统计实现 for iis7
    easyui tree 更改图标
    asp.net 访问页面访问统计实现
    记一次空格引起的查询问题
    SVN如何忽略dll文件和bin目录
    vmware 中安装Ghost XP 版本心得
    冒泡排序
    JS数组去重
  • 原文地址:https://www.cnblogs.com/xiaobaoblogs/p/9937362.html
Copyright © 2011-2022 走看看