JavaScript数组排序sort()方法与对象数组排序详解
本文详细介绍JavaScript原生sort()方法的使用,包括默认字母排序与自定义比较函数的应用。重点讲解如何通过编写by函数实现对象数组的单字段及多字段(如先age后name)排序,提供完整代码示例与逻辑解析。
JavaScript数组排序sort()基础用法
在JavaScript中,实现多维数组或对象数组的排序,核心依赖于原生的sort()方法,该方法专门用于对数组元素进行重新排列。
sort()方法的基本功能是数组元素排序,其标准语法格式如下:
arrayObject.sort(sortby)
该方法的返回值是对原数组的引用。需要特别注意,sort()操作直接在原数组上进行修改,不会生成新的副本数组。
若调用sort()时未传入任何参数,数组元素将按字符编码顺序(即字母顺序)进行排序。为确保比较准确,需先将所有元素转换为字符串形式。
若需依据其他标准排序,必须提供比较函数。该函数接收两个值进行比较,并返回一个数字以指示它们的相对顺序。比较函数通常包含两个参数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( 3600, 5010, 10100, 801);
arr.sort(NumDescSort);
alert(arr);
arr.sort(NumAscSort);
alert(arr);
对象数组排序与多字段排序实现
sort(fun)接收一个排序规则函数,用于比较两个数字的大小。对象数组排序的原理与此一致。若无需比较数字大小,可采用如下方式:
var myarray=["Apple", "Banana", "Orange"]
myarray.sort()
直接调用sort()后,数组元素按字符编码顺序(即字母顺序)排序。针对对象数组排序,我们需要先构建一个生成比较函数的函数:
//by函数接受一个成员名字符串做为参数
//并返回一个可以用来对包含该成员的对象数组进行排序的比较函数
var by = function(name){
return function(o, p){
var a, b;
if (typeof o === "object" && typeof p === "object" && o && p) {
a = o[name];
b = p[name];
if (a === b) {
return 0;
}
if (typeof a === typeof b) {
return a < b ? -1 : 1;
}
return typeof a < typeof b ? -1 : 1;
}
else {
throw ("error");
}
}
}
待排序的数组定义如下:
var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
直接调用该函数进行排序:
employees.sort(by("age"));
至此,对象数组的基本排序功能已实现。若需实现多键值排序(例如先按age排序,age相同时再按name排序),可对by函数进行扩展,使其接受第二个参数。当主要键值相等时,调用另一个compare方法来决定最终顺序。
//by函数接受一个成员名字符串和一个可选的次要比较函数做为参数
//并返回一个可以用来包含该成员的对象数组进行排序的比较函数
//当o[age] 和 p[age] 相等时,次要比较函数被用来决出高下
var by = function(name,minor){
return function(o,p){
var a,b;
if(o && p && typeof o === 'object' && typeof p ==='object'){
a = o[name];
b = p[name];
if(a === b){
return typeof minor === 'function' ? minor(o,p):0;
}
if(typeof a === typeof b){
return a < b ? -1:1;
}
return typeof a < typeof b ? -1 : 1;
}else{
thro("error");
}
}
}
employees.sort(by('age',by('name')));
现在可以放心使用。如果理解有困难,可直接复制该by函数到应用中调用即可。
Object.assign合并JS对象的用法与注意事项
2026-11-05 17:56:08
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
