JavaScript对象数组排序实例方法浅析

作者:代码拾荒

时间:2026-10-30

浏览:314

本文详解JavaScript中利用原生sort方法对对象数组进行排序的技巧。通过封装by函数,实现基于指定属性的单键排序,并扩展支持多键排序(如先按年龄后按姓名)。文章提供完整代码示例,展示如何自定义比较规则以处理复杂数据结构。

文章目录

JavaScript数组排序基础

在JavaScript中处理多维数组或对象数组的排序时,通常依赖原生的sort()方法来完成元素重排。

这里暂不赘述基础用法,先通过一个简单示例直观展示排序效果。


//Sort
alphabetically and ascending:
var
myarray=["Bob",
"Bully",
"Amy"]
myarray.sort()
//Array
now becomes ["Amy", "Bob", "Bully"]

若直接调用数组的sort()方法,系统会默认按字符编码顺序(即字母顺序)对元素进行排序。

接下来观察数字类型的排序表现:


//Sort
numerically and ascending:
var
myarray=[25, 8, 7, 41]
myarray.sort(function(a,b){return
a - b}) //Array
now becomes [7, 8, 25, 41]

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函数进行扩展,使其接受第二个参数。当主键值相等时,调用次要比较函数以确定最终顺序。


//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函数复制到项目中调用。

以上介绍了JavaScript对象数组排序的实例方法,希望能为读者提供帮助。如有疑问欢迎留言,小编将及时回复。感谢支持。

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章