JS中对数字数组sort失效问题

609 阅读1分钟

大家入门的第一门语言大部分是C、C++,然后由于学习前端的原因接触了JS。JS也和C、C++很像,这样学起来也很快。

问题就来了,见到sort()方法,有过语言基础,兴奋了这个简单我懂就默认从小到大,然后传个参数控制是从大到小还是从小到大排序,就没有去看JS的sort()方法文档。

C++中无论是对字符串数组sort(),还是对数字数组sort(),都会是我们想的那样不管是从小到大还是从大到小,它会对类型进行判断。在JS中就不一样了,对字符串数组排序是没有问题的,但是到了数字数组问题就出来了,它的排序结果和字符串数组输出顺序一样只有类型的不同

image.png

image.png

JS文档是这么写的 默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的 正因为如此,sort()方法在对数字进行排序时会产生不正确的结果。 问题到了这里就已经可以说是结束了,但是还是说一下怎么解决吧。

解决方法

sort()方法传入参数

//从小到大
let a = [12, 4, 7]
a.sort((n1, n2) => {
    return n1 - n2  
})
console.log(a); //[ 4, 7, 12 ]
//把代码中的 n1-n 2改为 n2-n1 结束从大到小

问题出的还是挺滑稽的,所以还是看看文档。