本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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]]
这个函数使得二维数组按照数组成员的第二个元素的大小,对所有数组成员进行了顺序排序
二维数组的这个应用方法也可以推广到其他异类数组中 \
欢迎任何留言!交流使人进步!