让我们来具体讲解一下 JavaScript 中数组的 .sort()
方法吧。
基本用法
.sort()
方法用于对数组进行排序,它可以带一个可选的排序函数作为参数,用于控制排序规则。
默认的排序规则是将元素转换成字符串后进行比较,然后按照 Unicode 码点排序。比如,对于以下数组:
const arr = [10, 5, 8, 3, 2];
如果我们调用 .sort()
方法,得到的结果是:
arr.sort(); // [10, 2, 3, 5, 8]
可以看到,排序结果并不是我们期望的升序排列。这是因为默认的排序规则将数字转换为字符串后进行比较, "10" 的码点小于 "2",因此 "10" 排在了 "2" 的前面。
为了让 .sort()
方法按照数值大小进行比较,我们可以传入一个排序函数,例如:
arr.sort((a, b) => a - b); // [2, 3, 5, 8, 10]
这个函数接收两个参数 a
和 b
,表示要比较的两个元素。如果返回值小于 0,那么 a
就要排在 b
前面,否则 a
就排在 b
后面。这里的函数就是将 a
减去 b
的结果作为返回值,因此可以实现升序排列。
如果要实现降序排列,只需要将排序函数改成 b - a
就可以了。
高级操作
.sort()
方法不仅可以用来排序基本类型的数组,还可以用来排序对象数组。如果要对对象数组进行排序,还需要传入一个排序函数,并在函数中指定比较哪个属性。例如,对于以下对象数组:
const people = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 20 },
{ name: "Charlie", age: 30 },
{ name: "David", age: 25 }
];
如果要按照年龄对数组进行升序排列,可以这样写:
people.sort((a, b) => a.age - b.age);
这个函数会比较两个对象的 age
属性,而不是比较它们的整个内容。
除了基本类型和对象数组,.sort()
方法还可以排序字符串数组、日期数组等等。需要注意的是,对于日期数组,需要先将日期转换成时间戳,然后再使用 .sort()
方法进行比较。
下面来看一个更复杂的示例。假设有一个学生成绩的数组,形如:
const scores = [
{ name: "Alice", math: 85, eng: 90 },
{ name: "Bob", math: 75, eng: 80 },
{ name: "Charlie", math: 90, eng: 70 },
{ name: "David", math: 80, eng: 85 }
];
现在要按照数学成绩和英语成绩的加权平均分进行排序,权重分别是 0.6 和 0.4,该怎么做呢?我们需要写一个排序函数,计算出加权平均分,再进行比较。具体实现如下:
scores.sort((a, b) => {
const aw = 0.6 * a.math + 0.4 * a.eng;
const bw = 0.6 * b.math + 0.4 * b.eng;
return bw - aw;
});
这个函数先计算出每个对象的加权平均分,然后将它们按照降序排列。注意,这里的返回值是 bw - aw
而不是 aw - bw
,这是因为我们要实现降序排列。
希望这份攻略能帮到你,如果还有问题欢迎继续提问。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中.sort()函数的常见用法与高级操作 - Python技术站