IT技术博客大学习 共学习 共进步

JavaScript:多维数组像ORDER BY一样实现多键值排序

BIWEB开源PHP WMS系统创始人ArthurXF肖飞的blog 2015-02-03 22:07:12 浏览 2,102 次

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

   arrayobj.sort(sortfunction);

参数:sortFunction

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

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

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

  • 负值,如果所传递的第一个参数比第二个参数小。

  • 零,如果两个参数相等。

  • 正值,如果第一个参数比第二个参数大。

  •    以上的方法在一维的排序还是很方便的,但像SQL语句中的ORDER BY 一样的多键值排序由怎么做呢?

       多维数组的多键值排序,则需要复杂一些,但不需要用循环解决。实际解决的道理是一样的 。

       数字:

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

    <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[0]==y[0])?((x[4]==y[4])?(x[8]-y[8]):(x[4]-y[4])):(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]))});

       }

        因此arrayObject.sort( sortFunction )的排序功能还是很强大的,终于能够实现了SQL语句中的ORDER BY 一样的功能。

建议继续学习

  1. 如何使用1M的内存排序100万个8位数 (阅读 12,226)
  2. 快速排序(Quicksort)的Javascript实现 (阅读 11,544)
  3. 腾讯-1亿个数据取前1万大的整数-题解答 (阅读 9,945)
  4. 深入浅出插入类排序算法(直接插入, 折半插入, 希尔排序) (阅读 7,425)
  5. 深入浅出交换类排序算法(冒泡排序,快速排序) (阅读 6,987)
  6. 为什么数组标号是从0开始的? (阅读 6,166)
  7. C语言结构体里的成员数组和指针 (阅读 6,083)
  8. Java程序员必知的8大排序算法 (阅读 5,563)
  9. 将数组定义为常量 (阅读 5,546)
  10. Mysql中的排序优化 (阅读 5,524)