精华内容
下载资源
问答
  • javascript数组排序函数 sort方法,默认是按照ASCII 字符顺序进行升序排列。
  • 本文给大家简单探讨下Js数组排序函数sort()的用法和示例,有需要的小伙伴可以参考下。
  • 首先我们先说一下reverse方法。 reverse 方法将一个 Array 对象中的元素位置进行反转。... 如果数组中只包含数字,那么数字将降序排列,如果数组中还包含其他类型,就将数组反转并返回数组。 sort 方法 返回
  • js 数组排序函数sort

    千次阅读 2015-11-15 23:11:17
    JavaScript数组排序函数 sort方法,默认是按照ASCII 字符顺序进行升序排列。 arrayobj.sort(sortfunction); 参数:sortFunction 可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将...

    JavaScript的数组排序函数 sort方法,默认是按照ASCII 字符顺序进行升序排列。

    arrayobj.sort(sortfunction);
    参数:sortFunction
    可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。
    sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。
    如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:
    负值,如果所传递的第一个参数比第二个参数小。
    零,如果两个参数相等。
    正值,如果第一个参数比第二个参数大。
    通过实际例子来了解sort函数
    1.字符串排序

       var fruits  =  [ "Banana""Orange""Apple""Mango" ]
      fruits. sort ()//排序结果是Apple,Banana,Mango,Orange 
      //若要得到结果Orange,Mango,Banana,Apple只需要将上步得到的fruits结果反转即可 

      fruits. reverse (); //排序结果是Orange,Mango,Banana,Apple

    2.数字排序
      
     从小到大
     var points  =  [ 40, 100, 1, 5, 25, 10 ]
     points. sort ( function (a,b ){ return a -b })//排序结果是1,5,10,25,40,100

    从大到小
    var points  =  [ 40, 100, 1, 5, 25, 10 ]
    points. sort ( function (a,b ){ return b -a })//排序结果是100,40,25,10,5,1

          以上的方法在一维的排序还是很方便的,但像SQL语句中的ORDER BY 一样的多键值排序由怎么做呢?
    多维数组的多键值排序,则需要复杂一些,但不需要用循环解决。实际解决的道理是一样的 。
    数字:

    以下的例子是将数字的多维数组按照第3列,像SQL语句中的ORDER BY col。数字的时候可以直接两个项目相减,以结果作为返回值即可。

    <script language=javascript> 
         var myArray  =  new  Array ()
         for ( var i = 0;i < 10;i ++  ) { 
            myArray [i ] = new  Array ()
            myArray [i ][ 0 ] = Math. floor ( Math. random () * 10 )
            myArray [i ][ 1 ] = Math. floor ( Math. random () * 10 )
            myArray [i ][ 2 ] = Math. floor ( Math. random () * 10 )
            myArray [i ][ 3 ] = Math. floor ( Math. random () * 10 )
            myArray [i ][ 4 ] = Math. floor ( Math. random () * 10 )
            myArray [i ][ 5 ] = Math. floor ( Math. random () * 10 )
            myArray [i ][ 6 ] = Math. floor ( Math. random () * 10 )
            myArray [i ][ 7 ] = Math. floor ( Math. random () * 10 )
            myArray [i ][ 8 ] = Math. floor ( Math. random () * 10 )
         } 
        myArray. sort (  function (x, y )  { 
             return  (x [ 2 ] -y [ 2 ]) 
        })

         for ( var i = 0;i <myArray.length;i ++  ) { 
             document. write (myArray [i ]. join ( "," )  +  "<br/>" )
         } 
    </script>

    字符:

    字符的时候sortFunction中的项目不能像数字一样直接相减,需要调用

    str1.localeCompare( str2 )方法来作比较,从而满足返回值。以下是多维数组的第1,2列作排序的情况。

    function sortFunction (array )  { 
         return array. sort (  function (x, y )  { 
         return  (x [ 0 ] ==y [ 0 ]) ? (x [ 1 ].localeCompare (y [ 1 ])) : (x [ 0 ].localeCompare (y [ 0 ])) 
        })

    }
    展开全文
  • 1、当不给sort函数传递一个比较函数时,他会将数组按照字典顺序排序。 这种排序 var arr = [456,12345]; arr.sort(); // 排序后arr = [12345,456] arr = ["z","a","adc","acdef"]; arr.sort(); // 排序后arr = ["a...

    先简单说明一下sort()函数

    1、当不给sort函数传递一个比较函数时,他会将数组按照字典顺序排序。
    这种排序

    var arr = [456,12345];
    arr.sort();
    // 排序后arr = [12345,456]
    
    arr = ["z","a","adc","acdef"];
    arr.sort();
    // 排序后arr = ["a", "acdef", "adc", "z"]
    
    arr = ["77","768"];
    arr.sort();
    // 排序后arr = ["768","77"]
    

    这种排序用来排序非数字类型数组比较合理,但是用来排序数字显然不是我们想要的。
    2、为了使用sort函数正确地给数字类型数组排序,sort函数提供了一个参数,让我们可以根据我们的实际需要(不只是升序、降序)对数组经行排序。

    var arr=[16,123,654,1,53,22,512,55,3];
    arr.sort();
    // 排序后arr = [1, 123, 16, 22, 3, 512, 53, 55, 654]
    arr.sort(function(a,b){
    	if (a < b ) {
    		return -1;
    	}
    	if (a > b ) {
    		return 1;
    	}
    	return 0;
    });
    // 一般简写为arr.sort(function(a,b){return a-b;});
    // arr.sort(function(a,b){return b-a;});	这样子是降序排序
    // arr.sort(function(a,b){return -1});		这样子是数组反转,不排序。
    // 排序后arr = [1, 3, 16, 22, 53, 55, 123, 512, 654]
    

      可以看到当我们传递一个比较函数进去的时候,sort对这个数字数组进行了正确的排序。

    可以得出一些结论:

    1、sort提供的这个参数接收一个函数,这个函数的主要作用是可以让你自定义数组的排序方式,称之为比较函数。
    2、该比较函数又有两个参数。
    3、我们需要对这两个参数进行比较后,返回一个值给sort函数,告诉sort函数a,b哪个是较大的数。

    那么问题来了,这个比较函数的两个参数到底指的是这个数组中的那两个数,他的返回值-1,0,1又到底代表什么意思。

      不要小看这两个问题,在做一些复杂排序的时候,不搞懂很难用sort函数按照你想要的顺序排序数组。
      我们来看一下比较权威的MDN是怎么解释这个比较函数的。
    MDN对sort函数的说明:

      firstEl
        第一个用于比较的元素。
      secondEl
        第二个用于比较的元素。

      如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:
      如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
      如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备  注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
      如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
      compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

      MDN对a,b的解释是第一个用于比较的元素、第二个用于比较的元素,emmmm,个人觉得描述不太准确。这里打印看一下就知道了。

    var arr = [3,2];
    arr.sort(function(a,b){console.log(a,b)}) //打印出2 3
    

    欸,这跟描述的有点不太对吧,为什么打印出来a是2。接着测试

    var arr = [4,2,3,1];
    arr.sort(function(a,b){console.log(a,b)}) 
    //打印出2 3,3 2,1,3
    

      相信这里大家应该看出来,它内部使用的插入排序(不了解的可以先了解一下,大概是从数组第二个元素开始,插入到该元素之前的子数组中,使其有序,然后指向下一个元素,接着插入到前面的数组里,直到整个数组有序)。
      所以该比较函数的第一个参数应该是从数组下标为1的元素,每次比较完都指向下一个元素。第二个参数指向第一个参数之前子数组的中间元素(因为该方法用的不是简单的直接插入排序,而是二分插入排序)
      其实sort函数内部实现的排序不单单只是插入排序,只是当数据量不大的时候,显然插入排序更有效率,他也会根据数组的规模选择使用快速排序还是插入排序对数组进行排序。
      简单说一下快速排序。选择数组的一个元素,通过某种算法找到他在这个数组中的确切位置,当查找结束的时候,刚好他左边的元素都小于这个元素,他右边的所有元素都大于这个元素。然后以该元素为间隔将数组分成两半,再查找他左边数组某个元素确切的位置,查找他左边数组某个元素确切的位置,直到整个数组有序。
      sort() V8 源码,从710行开始

    // In-place QuickSort algorithm.
    // For short (length <= 22) arrays, insertion sort is used for efficiency.
    

      这是源码里面的某段注释,大概意思是当数组长度小于等于22的时候,插入排序更有效率。可以看出,当数组规模较大时,sort()采用快速排序对数组经行排序,否则用插入排序。
      从排序算法的应用场景来说这样安排也比较合理,没有一个排序算法是万能,适用所有数据场景的。对于数据规模较小、基本有序的数组插入排序更为高效。在普通、平均条件下,快速排序更为高效。

    展开全文
  • Js数组排序函数sort()

    2016-10-16 21:07:00
    JS实现多维数组和对象数组排序,用的其实就是原生sort()函数,语法为:arrayObject.sort(sortby)(sortby 可选。规定排序顺序。必须是函数。)  返回值为对数组的引用;请注意,数组在原数组上进行排序,不生成...

    JS实现多维数组和对象数组排序,用的其实就是原生sort()函数,语法为:arrayObject.sort(sortby)(sortby 可选。规定排序顺序。必须是函数。)

      返回值为对数组的引用;请注意,数组在原数组上进行排序,不生成副本。

    如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

      eg:

    <script type="text/javascript">
    
        var arr = new Array(6)
        arr[0] = "a"
        arr[1] = "f"
        arr[2] = "c"
        arr[3] = "e"
        arr[4] = "b"
        arr[5] = "d"
    
        document.write(arr + "<br />")
        document.write(arr.sort())
    
    </script>

     输出:

    a,f,c,e,b,d
    a,b,c,d,e,f 

     

    如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

      若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
      若 a 等于 b,则返回 0。
      若 a 大于 b,则返回一个大于 0 的值。

    function NumAscSort(a,b)
    {
     return a - b;
    }
    function NumDescSort(a,b)
    {
     return b - a;
    }
    var arr = new Array( 1, 0, 3, 2, 0 ); 
    arr.sort(NumDescSort);
    alert(arr);
    arr.sort(NumAscSort);
    alert(arr);
    arr.sort();
    alert(arr);

     

    转载于:https://www.cnblogs.com/fatty-yu/p/sort.html

    展开全文
  • 这个例子里没有传入比较函数那么元素将按照 ASCII 字符顺序进行升序排列,另外这个数组中包含了多种类型的数据,所以即使传入了比较函数,它依然按照ASCII 字符顺序进行升序排列。 例如 var a, l; // 声明变量...

    首先我们先说一下reverse方法。

    reverse 方法将一个 Array 对象中的元素位置进行反转。在执行过程中,这个方法并不会创建一个新的 Array 对象。

    例如:

    var array1 = ['a','cc','bb','hello',false,0,3];
    var array2 = [3,5,2,1,7,9,10,13];
    array1.reverse();
    array2.reverse();
    alert(array1);
    alert(array2);

    如果数组中只包含数字,那么数字将降序排列,如果数组中还包含其他类型,就将数组反转并返回数组。

    sort 方法

    返回一个元素已经进行了排序的 Array 对象。

    arrayobj.sort(sortfunction)

    参数

    arrayObj

    必选项。任意 Array 对象。

    sortFunction

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

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

    如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:

    • 负值,如果所传递的第一个参数比第二个参数小。
    • 零,如果两个参数相等。
    • 正值,如果第一个参数比第二个参数大。 
    例1:()

    var a, l;                       // 声明变量。
    a = ["X" ,"y" ,"d", "Z", "v","m","r",false,0];
    l = a.sort();                   // 排序数组。
    alert(l);                      // 返回排序的数组。

    这个例子里没有传入比较函数那么元素将按照 ASCII 字符顺序进行升序排列,另外这个数组中包含了多种类型的数据,所以即使传入了比较函数,它依然按照ASCII 字符顺序进行升序排列。

    例如

    var a, l;                       // 声明变量。
    a = ["X" ,"y" ,"d", "Z", "v","m","r",false,0];
    l = a.sort();                   // 排序数组。
    alert(l);                      // 返回排序的数组。
    ll = a.sort(compack);
    alert(ll);//返回与上面一样
    function compack(a,b){
    	return a-b;
    }

    当我们需要对数字排序的时候可以使用sort方法,只要给它传入一个比较函数就可以轻松的升序和降序。

    升序:

    var a, l;                       // 声明变量。
    a = [6,8,9,5.6,12,17,90];
    l = a.sort(compack);                   // 排序数组。
    alert(l);                      // 返回排序的数组。
    
    function compack(a,b){
    	return a-b;
    }

    降序:

    var a, l;                       // 声明变量。
    a = [6,8,9,5.6,12,17,90];
    l = a.sort(compack);                   // 排序数组。
    alert(l);                      // 返回排序的数组。
    
    function compack(a,b){
    	return b-a;
    }
    在比较函数里升序返回a-b,降序返回b-a。


    展开全文
  • 本文给大家分享一个用于数组或者对象的排序函数。该函数可以以任意深度的数组或者对象的值作为排序基数对数组或的元素进行排序
  • PHP一维数组排序可以...以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义:function array_sort($arr,$keys,$type='asc'){$keysvalue = $new_array = array();foreach ($arr as $k=>$v){$k...
  • JS数组排序函数 sort 坑项

    千次阅读 2018-08-29 14:28:57
    推理:Array.sort()默认是数组升序,但是数组中的元素会被强制转化成数组再做比较,又因为 "100" &lt; "99",于是最终升序结果为[100,99]   扩展:若数组元素为对象时,比较过程会把对象...
  • JavaScript实现多维数组、对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序。 sort() 方法用于对数组的元素进行排序。语法如下: arrayObject.sort(sortby) 返回值为对数组的引用。请注意...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,478
精华内容 30,991
关键字:

js数组排序函数