JavaScript数组与对象排序实战:从字典序到自定义规则

作者:半夏时间:2026-10-22 06:02:58浏览:171

本文详解JavaScript中数组与对象的排序方法。默认sort按字典序排列数字会导致错误,需传入比较函数实现数值排序。通过示例展示如何对包含对象的数组按指定属性进行升序或降序排列,掌握自定义比较逻辑是处理复杂数据结构的关键。

JavaScript数组与对象排序实战:从字典序到自定义规则

JavaScript数组与对象排序的实例解析

数组排序:处理字典序陷阱

数组排序

在JavaScript开发中,开发者常发现sort()函数默认按照字典顺序(字符串Unicode码点)进行排序。例如,对于数字数组,直接调用sort()会得到不符合数值大小的结果,具体表现如下例所示:


var ary = [2, 98, 34, 45, 78, 7, 10, 100, 99];
ary.sort();
console.log(ary);

控制台输出结果:


Array [ 10, 100, 2, 34, 45, 7, 78, 98, 99 ]

这同样印证了先前的结论,上述结果仅比较数组元素的首位,并按1-9顺序排列,因此需向sort函数传入比较函数(此处类比C语言函数指针,即传入另一函数作为规则,计算机依此执行),同理,提供规则即可,参考以下代码:


var ary = [2, 98, 34, 45, 78, 7, 10, 100, 99];
ary.sort((a, b) => {
 return a-b;
});
console.log(ary);

降序输出示例:


ary.sort(function(a, b) {
 return b-a;
});
console.log(ary);

上述代码使用了ES6的箭头函数语法,其等效的传统写法为:


ary.sort(function(a, b) {
 return a-b;
});

最终输出结果:


Array [ 2, 7, 10, 34, 45, 78, 98, 99, 100 ]

Array [ 100, 99, 98, 78, 45, 34, 10, 7, 2 ]

对象排序:自定义属性比较

对象排序

接下来讨论对对象数组的排序。假设有一个包含多个对象实例的数组,结构如下:


var objArray = [
 {name : 'lily', age : 22},
 {name : 'kandy', age : 20},
 {name : 'lindy', age : 24},
 {name : 'Jone', age : 27}
];

我们需要对该数组进行排序操作:


function sortObj(array, key) {
 return array.sort(function(a, b) {
  var x = a[key];
  var y = b[key];
  return x - y;
  //或者 return x > y ? 1 : (x < y ? -1 : 0);
 });
}

控制台输出结果:

JavaScript数组与对象排序实战:从字典序到自定义规则

以上即为JavaScript数组与对象排序的完整实例讲解。若有任何疑问,欢迎留言讨论。感谢阅读,希望能对大家有所帮助,谢谢支持!

作者最新文章