js的Array的sort()排序⽅法
Array的sort()⽅法默认把所有元素先转换为String再排序,字符串是根据ASCII码进⾏排序,所以sort()⽅法排序结果画风可能是这样的
// 看上去正常的结果:
['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft'];
// apple排在了最后:
['Google', 'apple', 'Microsoft'].sort(); // ['Google', 'Microsoft", 'apple']
// ⽆法理解的结果:
[10, 20, 1, 2].sort(); // [1, 10, 2, 20]
第⼆个排序把apple排在了最后,是因为字符串根据ASCII码进⾏排序,⽽⼩写字母a的ASCII码在⼤写字母之后。
第三个排序是因为sort()⽅法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前⾯,⽽字符'1'
⽐字符'2'的ASCII码⼩。
幸运的是,sort()⽅法也是⼀个⾼阶函数,它还可以接收⼀个⽐较函数来实现⾃定义的排序。
要按数字⼤⼩排序,我们可以这么写:
sort()⽅法⽤于对数组的元素进⾏排序,并返回数组。默认排序顺序是根据字符串Unicode码点。
语法:arrayObject.sort(sortby);参数sortby可选。规定排序顺序。必须是函数。
注:如果调⽤该⽅法时没有使⽤参数,将按字母顺序对数组中的元素进⾏排序,说得更精确点,是按照字符编码的顺序进⾏排序。要实现这⼀点,⾸先应把数组的元素都转换成字符串(如有必要),以便进⾏⽐较。
如果想按照其他标准进⾏排序,就需要提供⽐较函数,该函数要⽐较两个值,然后返回⼀个⽤于说明这两个值的相对顺序的数字。⽐较函数应该具有两个参数 a 和 b,其返回值如下:
若 a ⼩于 b,在排序后的数组中 a 应该出现在 b 之前,则返回⼀个⼩于 0 的值。
若 a 等于 b,则返回 0。
若 a ⼤于 b,则返回⼀个⼤于 0 的值。
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
});
/
sort函数 js/
arr.sort(function(a,b){
return a-b;//升序
return b-a;//降序
})
console.log(arr); // [1, 2, 10, 20]
最后友情提⽰,sort()⽅法会直接对Array进⾏修改,它返回的结果仍是当前Array:
var a1 = ['B', 'A', 'C'];
var a2 = a1.sort();
a1; // ['A', 'B', 'C']
a2; // ['A', 'B', 'C']
a1 === a2; // true, a1和a2是同⼀对象
例如:学⽣根据年龄⼤⼩进⾏排序
var list=[
{
name:"hq",
age:24
},
{
name:"gq",
age:21
},
{
name:"xm",
age:25
}
]
function compare(property){
return function(a,b){
var val1=a[property];
var val2=b[property];
return val1-val2;
}
}
console.log(list.sort(compare("age"))) console.log(list.sort(function(a,b){
var val1=a["age"];
var val2=b["age"];
return val1-val2;
}));
console.log(list);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论