Array.sort(function)方法简述

190 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、一维数组

①、 使用sort()方法会直接改变原数组,与reverse()相同

arr[2,3,4,1]; => arr.sort()   //[1,2,3,4]

 arr2['we', 'try', 'are']  => arr2.sort()  //['are','try','we']

:这个方法是有缺陷的,如果用这种方法对含义数值的数组进行排序,它会将数值当成字符串进行排序比较

例如:arr0[2,12,4,1]; => arr0.sort()  //[1,12,2,4] 因为12被当成了'12',而‘12'<'2'

方法②则不会有这种缺陷

\

②、 可以传入一个函数做参数 sort(function(a,b){...})

底层是冒泡法,a,b会遍历相邻的两个数组成员。判断、比较 a、b的大小,然后返回相应的指令,是我们在函数中要做的工作

**\

顺序>>

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回-1(一个小于 0 的值),该指令表示不用替换位置
  • 若 a 等于 b,则返回 0,该指令表示不用替换位置。
  • 若 a 大于 b,则返回1(一个大于 0 的值),该指令表示需要替换位置
  • 这个流程也可以简化成:sort(function(a,b){return a-b;})

\

逆序>>

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之后,则返回1,表示a、b要替换位置
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回-1,或者以小于0的值,表示a、b不用替换位置
  •  这个流程也可以简化成:sort( function(a,b){return b-a;} ) 

\

\

2、二维数组

二维数组直接使用arr.sort()不会有排序效果

sort()自有的代码中也没有比较两个数组的规范,它原本就是比较数组中的字符串的, 所以它无法比较数组中的两个数组

\

只能使用1-②中sort(function(a,b){...})传参的方法

以arr3=[[8,3,4],[5,6,8],[2,1,1]]为例子:

arr3.sort(function(a,b){

 return a[1]-b[1]

})

结果:console.log(arr3)  //[[2,1,1],[8,3,4],[5,6,8]]

这个函数使得二维数组按照数组成员的第二个元素的大小,对所有数组成员进行了顺序排序

二维数组的这个应用方法也可以推广到其他异类数组中 \

欢迎任何留言!交流使人进步!