阅读 124

Sort()与Reverse()

sort和reverse都是函数重排序的方法,sort()是按升序排列数组,即从小到大排列。reverse()是将数组反转。

1、sort()

1、实现原理

sort方法调用数组的toString(),然后比较都得到的字符串确定最终如何排序。

2、sort()存在的问题

let testData = [1,20,10,15,6]
console.log(testData.sort()); // [1,10,15,6]
复制代码

用sort方法输出的数据是[1,10,15,6],并不是我们想象中的[1,6,10,15],所以这是为什么呢? 其实原因很简单,本身sort是调用toString方法比较字符串更改,那sort调用toString方法之后就会变成 1,2,0,1,0,1,5,6进行比较,然后在比较6和10的时候,会先比较第一位数据,即6和1,即使Number类型的10>6,但是变成字串的10<6,这就是原因所在。

3、sort()的解决办法

sort方法可以接收一个比较函数作为参数,方便我们指定数值的排序

1、升序

function compare (value1, value2) { // 方便sort进行正确合理的排序比对
  if (value1 < value2) {
    return -1
  } else if (value1 >  value2) {
    return 1
  } else {
    return 0
  }
}
let testData = [1,20,10,15,6]
console.log(testData.sort(compare)); // [1,6,10,15]

///这里更简单的写法是
function compare (value1, value2) {
	return value1 -value2
}
复制代码

函数要接收两个参数,在升序的情况下,如果参数1比参数2大,则返回1,小于则返回-1,等于则返回0。 比较函数可以用于大多数数据类型

2、降序

function compare (value1, value2) { // 方便sort进行正确合理的排序比对
  if (value1 > value2) {
    return -1
  } else if (value1 < value2) {
    return 1
  } else {
    return 0
  }
}
// 这里更简单的写法是:
function compare (value1, value2) {
return value2 - value1 
}
复制代码

因为比较函数是通过返回一个>0、<0、或者=0的数值来影响排序的结果,所以运用减法就能达到这个效果。 这里的降序可能多此一举,知道数据排列正确,用reverse()进行数据反转即可

4、返回值

reverse()和sort()方法的返回值都是经过排序之后的数组。

文章分类
前端
文章标签