js⼆维数组排序sort()函数
⼀、按数值排序
var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];
arr.sort(function(x, y){  return x[0] – y[0];});
其实是数组依次将数组元素复制给x,y,⽐如⾸先将arr[0]赋给x,arr[1]赋给y,然后⽤x[0] – y[0],根据返回的值,
如果返回的是⼤于0的数,那么就把数组中x放到y的后⾯,
如果返回的是0则不变,
如果⼩于0则将x放到y的前⾯,
然后第⼀个排序好之后在进⾏下⾯两个的排序,直到整个数组排序完成。
这是默认升序的⽐较函数,如果要降序排列则只需修改⽐较⽅式,改为 return y[0] – x[0] 即可,
这⾥我们x[0]表⽰是按第⼀列进⾏排序,我们这⾥也可以按其他列进⾏排序。这⾥的排序默认就会修改arr的数组结构,所以排序完arr就是按第⼀列升序的数组了。
⼆、按字符串排序var arr = [['中','国'], ['啊','的'], ['哦','的']];arr.sort(function(x, y){  return x[0].localeCompare(y[0]);});
localeCompare作⽤:⽤本地特定的顺序来⽐较两个字符串。localeCompare⽅法的使⽤规则是stringObject.localeCompare(target),
如果 stringObject ⼩于 target,则 localeCompare() 返回⼩于 0 的数,将x放到y的前⾯,
如果 stringObject ⼤于 target,则该⽅法返回⼤于 0 的数,就把数组中x放到y的后⾯,。
如果两个字符串相等,或根据本地排序规则没有区别,该⽅法返回 0,则不变,
js 二维数组其⽐较使⽤的是本地的规则,本地规则意思就是使⽤操作系统底层对这些本地字符排序的规则进⾏排序,默认情况下⽐如使⽤⼤于号这样的⽐较只是纯粹⽐较两个字符的unicode的数⼤⼩,会与很多语⾔不符。
结果就会按第⼀列中⽂字的拼⾳排序,如果含有英⽂的话,默认是将英⽂放在前⾯,如果是纯英⽂的
话,会按字母顺序来,⼤写排在⼩写的后⾯,这样就可以实现字符串的排序了,包括中⽂和中英混排。⾄于要降序排列的话,⽅法与上⾯相同,改成return
y[0].localeCompare(x[0]); 即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。