前言

本文主要是我对 js sort() 函数的一些疑问,和解决思路

一、sort 函数的使用

1.1 使用

默认情况下,sort()会按照由小到大重新排列数组元素。

2.1问题

但是,sort()会在每一项上调用 String()来转型函数(返回表示相应类型值的字符串),然后比较字符串来决定顺序。如果数组的元素都是数值,
也会先把数组转换为字符串然后再比较、排序。
而字符串排序是按照以下原则:

  • 非空字符串 > 空字符串
  • 从第一个字符的ASCII值码开始比较,如果一方第一个就比另一方大,那么它就大于另一方,后面的字符不再比较。
  • 长度不能直接决定大小,字符串的大小是由左边开始最前面的字符决定的。

所以我们在比较 [0, 1, 5, 10, 15] 的大小时,会发现,sort 得到的结果是 0,1,10,15,5。对照我上面说的字符串比较,不难发现,5是最大的,因为这个5在第一位,5个数字中第一位没有比它还大的。

3.1解决

所以,我们需要让 sort() 方法接收一个比较函数。比如:

function compare(a, b) { if (a < b) { return -1; } else if (a > b) { return 1; } else { return 0; }
}
let values = [0, 1, 5, 10, 15];
values.sort(compare);

我们的 compare 可以告诉 sort 数组中每两数的大小,然后,sort 就知道到底是哪个大哪个小了。

js 的 sort 函数相关推荐

  1. JS - sort()函数

    一.sort函数 sort函数用于数组的排序 不生成副本,直接更改原来数组 若默认无参数则按编码顺序排序 二.对数字排序 var arr=[-2,-1,0,2,1]; console.log(arr. ...

  2. JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype

    一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...

  3. sort 函数实现数值排序

    下面是详细讲解, 比较啰嗦, 嫌弃的请直接看本文最后 什么是sort函数? sort函数是 JS 数组中自带的用于排序的函数 二话不说上代码 var arr = [3,5,6,8,4,1,9,7]; ...

  4. 自学JavaScript第二天- JS 进阶: 对象 函数

    自学JavaScript第二天- JS 进阶: 对象 函数 对象进阶 构造函数 使用类 类的继承 静态方法 函数进阶 方法 装饰器 高阶函数 map / reduce filter sort ever ...

  5. JS中sort方法排序

    JS中sort方法排序 一.数字排序(string类型) 二.数字排序(string类型和number类型) 三.混合排序(string.number和字母) 四.函数排序 五.数组对象排序 一.数字 ...

  6. C++ algorithm的sort函数总结

    sort函数 sort对给定区间进行排序,支持各种数据类型,迭代器,结构体,自定义排序规则 stable_sort 对给定区间进行稳定排序,且可保证相等元素的原本相对次序在排序后保持不变 partia ...

  7. C中的qsort函数和C++中的sort函数的理解与使用

    一.qsort()函数 原型:_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); ...

  8. C++ STL的sort 函数 以及自定义的比较函数

    没什么特别擅长的内容,先做个小笔记好了.在编程时,使用C++的标准模板库(STL)能节约工作量,增加代码的可读性,能灵活运用无疑会提高编程的效率,俗话说:Write less, create more ...

  9. 不可不知的STL sort函数实现原理

    sort函数一直以来被认为是快排,今天看到一篇文章,感觉自己知道的太少. 建议大家还是要去啃<STL源码剖析>,我也要去读了,先立个flag,后续1-2个月写STL源码剖析上得到的启发. ...

最新文章

  1. office技巧——编号与文字之间的空白大小调整
  2. 如何通过网站SEO诊断来做竞争对手的分析?
  3. mysql主从复制自增_关于mysql主从复制自增长列
  4. Android系统启动-init篇
  5. linux的used 内存去向,Linux Used内存储器到底哪里去了
  6. __user_initial_stackheap 库函数翻译(转)
  7. JDBC+Servlet+JSP整合开发之25.JSP动作元素
  8. Windows应用程序启动命令汇总
  9. make时候说找不到makefile_找不到对象,应不应该接受相亲?听听三个过来人怎么说...
  10. 简述python程序的运行原理_谈谈 Python 程序的运行原理
  11. python安装sqlalchemy python2_Python SQLAlchemy --2
  12. vscode markdown_使用vscode开始Markdown写作之旅
  13. 再学 GDI+[65]: 路径画刷(5) - SetGammaCorrection
  14. Java比较器-学习
  15. 记录一下我的游戏私服搭建(台服dnf)
  16. tfidf算法 python_Python TFIDF计算文本相似度
  17. xp无法查看共享计算机的文件,如何解决XP不能访问win7共享文件
  18. php 对上传图片尺寸裁切,PHP图片自动裁切应付不同尺寸的显示
  19. Creo Illustrate动画制作视频教程
  20. 【工具】1343- NVS —— js 实现的node版本管理工具

热门文章

  1. Android应用程序是如何请求SurfaceFlinger服务渲染一个Surface的?
  2. open函数O_CLOEXEC作用
  3. Android 应用系统签名
  4. 量化交易 | 参数最佳化的三大陷阱
  5. Python编写程序,利用“凯撒密码”方案,实现对用户输入文字的加密操作
  6. 设计模式:分解与抽象
  7. Angry Birds的WP7版本将在4月6日发布
  8. mysql数据库存储表情都是问号_数据库保存中文全为问号以及emoji表情保存出错...
  9. Log4j2使用详解
  10. 用 错错错错错错知知中算改改不不 写一句富含哲理的话