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; });
//
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);
来源:https://www.cnblogs.com/yourself/p/8709459.html
参考:https://www.cnblogs.com/moqiutao/p/6382097.html