JS数组的sort()方法已经可以满足我们对数组的很多处理需求了,可以对数字、字母、字符串(按照字母)和布尔类型进行排序。
下面是具体的介绍:
- 对数字进行排序:
var arr = [10, 5, 40, 25, 1]; document.write(arr + "<br />"); document.write(arr.sort());
输出:
[10, 5, 40, 25, 1] [1, 10, 25, 40, 5]
可以看出它并没有按照数字大小进行排序,而是按照字符串的方式(先比较第一位,如果第一位相等依次比较后面的)。
- 对数字按照大小进行排序:
function sortNumber(a,b) { return a - b } var arr = [10, 5, 40, 25, 1]; document.write(arr + "<br />") document.write(arr.sort(sortNumber))
输出:
[1, 10, 25, 40, 5] [1, 5, 10, 25, 40]
若a-b大于0,则b排在前面;若a-b小于0,则a排在前面。若想按照降序排序,函数内可改为“return b - a;”。
- 对字符串进行排序:
var arr = ["Alfredo", "Ronald", "salvador", "Alfredo", "Saryn"]; document.write(arr + "<br />"); document.write(arr.sort());
输出:
["Alfredo", "Ronald", "salvador", "Alfredo", "Saryn"] ["Alexander", "Alfredo", "Ronald", "Saryn", "salvador"]
原理与例1类似。
- 同时按照两种方式排序。需求是这样的:“active”为1的排在前面,“active”为0的排在后面,然后分别按照“name”的字母顺序进行排序:
var arr= [{ "name" : "Alfredo", "active": 0 }, { "name" : "Alexander", "active": 0 }, { "name" : "Ronald", "active": 1 }, { "name" : "salvador", "active": 0 }, { "name" : "Saryn", "active": 1 }]; arr.sort(function (a, b) { return b.name < a.name; }).sort(function (a, b) { return b.active - a.active });
输出:
[{ "name" : "Ronald", "active": 1 }, { "name" : "Saryn", "active": 1 }, { "name" : "Alexander", "active": 0 }, { "name" : "Alfredo", "active": 0 }, { "name" : "salvador", "active": 0 }];
我们是这样处理的:首先按照字母的顺序进行排序,然后把“active”为1的放在前面,“active”为0的放在后面。