JavaScript数组排序:从基础到多维多键值排序

作者:青柠

时间:2026-10-23

浏览:437

本文详细介绍JavaScript中Array对象的sort方法。默认情况下,元素按ASCII字符顺序升序排列。通过传入自定义比较函数,可实现数值大小排序及类似SQL ORDER BY的多维多键值排序。文章分别演示了数字型多维数组通过直接相减返回值,以及字符型数据利用localeCompare方法进行多列排序的具体代码实现。

文章目录

JavaScript数组排序基础

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]=Math.floor(Math.random()*10);
myArray[i]=Math.floor(Math.random()*10);
myArray[i]=Math.floor(Math.random()*10);
myArray[i]=Math.floor(Math.random()*10);
myArray[i]=Math.floor(Math.random()*10);
myArray[i]=Math.floor(Math.random()*10);
myArray[i]=Math.floor(Math.random()*10);
myArray[i]=Math.floor(Math.random()*10);
} 
myArray.sort( function(x, y) ...{
return (x[0]==y[0])?((x==y)?(x-y):(x-y)):(x-y)
}); 
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.localeCompare(y)):(x[0].localeCompare(y[0]))
}); 
} 

因此,arrayObject.sort( sortFunction ) 的排序功能十分强大,最终实现了类似 SQL 语句中 ORDER BY 的多键值排序功能。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章