如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
  • 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 - Mozilla 在 2003 年之前的版本);
  • 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
  • compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

所以,比较函数格式如下:

function compare(a, b) {if (a < b ) {           // 按某种排序标准进行比较, a 小于 breturn -1;}if (a > b ) {return 1;}// a must be equal to breturn 0;
}

要比较数字而非字符串,比较函数可以简单的以 a 减 b,如下的函数将会将数组升序排列

function compareNumbers(a, b) { //升序return a - b;
}function compareNumbers(a, b) { //降序return b-a;
}

sort 方法可以使用 函数表达式 方便地书写:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {return a - b;
});
console.log(numbers);也可以写成:
var numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b);
console.log(numbers);// [1, 2, 3, 4, 5]

对象可以按照某个属性排序:

var items = [{ name: 'Edward', value: 21 },{ name: 'Sharpe', value: 37 },{ name: 'And', value: 45 },{ name: 'The', value: -12 },{ name: 'Magnetic' },{ name: 'Zeros', value: 37 }
];// sort by value
items.sort(function (a, b) {return (a.value - b.value)
});// sort by name
items.sort(function(a, b) {var nameA = a.name.toUpperCase(); // ignore upper and lowercasevar nameB = b.name.toUpperCase(); // ignore upper and lowercaseif (nameA < nameB) {return -1;}if (nameA > nameB) {return 1;}// names must be equalreturn 0;
});

对非 ASCII 字符排序
当排序非 ASCII 字符的字符串(如包含类似 e, é, è, a, ä 等字符的字符串)。一些非英语语言的字符串需要使用 String.localeCompare。这个函数可以将函数排序到正确的顺序。

var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
items.sort(function (a, b) {return a.localeCompare(b);
});// items is ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']

使用映射改善排序
compareFunction 可能需要对元素做多次映射以实现排序,尤其当 compareFunction 较为复杂,且元素较多的时候,某些 compareFunction 可能会导致很高的负载。使用 map 辅助排序将会是一个好主意。基本思想是首先将数组中的每个元素比较的实际值取出来,排序后再将数组恢复。

// 需要被排序的数组
var list = ['Delta', 'alpha', 'CHARLIE', 'bravo'];// 对需要排序的数字和位置的临时存储
var mapped = list.map(function(el, i) {return { index: i, value: el.toLowerCase() };
})// 按照多个值排序数组
mapped.sort(function(a, b) {return +(a.value > b.value) || +(a.value === b.value) - 1;
});// 根据索引得到排序的结果
var result = mapped.map(function(el){return list[el.index];
});

JS使用sort进行升序和降序排序相关推荐

  1. 【Java】用sort实现对数组的升序和降序排序

    Java 用 sort 实现对数组的升序和降序排序 一.ArrayList 的升序与降序 二.数组升序 三.数组降序 方法一 方法二 一.ArrayList 的升序与降序 升序:Collections ...

  2. python升序和降序排序sort_【python】 sort、sorted高级排序技巧

    这篇文章主要介绍了Python中列表(List)的详解操作方法,包含创建.访问.更新.删除.其它操作等,需要的朋友可以参考下 Python list内置sort()方法用来排序,也可以用python内 ...

  3. php表格单元格怎么实现排序,angularjs,_angular表格点击序号进行升序,降序排序,怎么实现。,angularjs - phpStudy...

    angular表格点击序号进行升序,降序排序,怎么实现. 序号内容姓名地点时间序号 {{$index + 1}}{{$index + 1}}{{$index + 1}}{{$index + 1}}{{ ...

  4. python怎么升序和降序排序?

    python怎么升序和降序排序 推荐:<python视频教程> 1.首先打开cmd命令提示符,输入指令"ipython"打开python的命令行工具: 2.在命令行中先 ...

  5. python怎么升序和降序排序

    python怎么升序和降序排序 1.首先打开cmd命令提示符,输入指令"ipython"打开python的命令行工具: 2.在命令行中先定义一个变量number数组,里面写入几个数 ...

  6. Java 8 –按值对HashMap进行升序和降序排序

    在上一篇文章中,我向您展示了如何通过键对Java 8中的Map进行排序 ,今天,我将教您如何使用Java 8功能(例如,lambda表达式,方法引用,流和新方法) 按值对Map进行排序.添加到java ...

  7. Python对IP地址列表排序、对列表进行去重、IP地址与MAC地址组合的多个元组的列表排序,对列表内的元组升序和降序排序

    1.python对IP地址列表排序 # -*- coding: utf-8 -*-import socket listIP = ['10.5.11.1', '192.168.1.33', '10.5. ...

  8. 5.10 数据的升序和降序排序 [原创Excel教程]

    原文:http://coolketang.com/staticOffice/5a97f32ad50eee266a9bbac7.html 1. 本节课将为您演示,如何对工作表中的数据进行升序或降序排列. ...

  9. python升序和降序排序_python中序列的排序,包括字典排序、列表排序、升序、降序、逆序...

    一.基础概念 我们知道python中的内建序列包括字典.列表.元组.字符串等,序列是python中最基本的数据结构. 列表.元组.字符串这类的序列的索引默认第一个元素的索引从0开始,第二个元素的索引是 ...

最新文章

  1. [备忘]使用wcf联合服务
  2. 天天python爬虫,你不腻的吗?
  3. 那些 IT 界的神翻译,原来我学不好编程的原因就在这
  4. python 栈【测试题】
  5. The Event System
  6. PowerShell与系统开局(下)
  7. 的write方法有哪些参数_Python笔记13:文件操作三件套:read,write,seek
  8. SoundSource for Mac - 音频控制工具
  9. SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证
  10. flume学习(七):自定义source
  11. 六石管理学:夸大成绩,当事人自己是否知道
  12. [Ubuntu 18.04][CPU]MindSpore V1.0源码安装初体验(直播结束)
  13. HTML实现直播礼物特效,抖音哪些礼物可以触发特效,抖音直播礼物特效大全
  14. 各种泵的图形符号_常见液压系统中液压元件图形符号
  15. OpenCV框架与图像插值算法
  16. 尼古拉·特斯拉,到底有多神?
  17. 磁盘阵列(RAID)级别的简单介绍
  18. ROS配置多机器人导航
  19. 图数据库初探相关——1.Simulating Mobile Money Fraud pt.1(模拟移动支付诈骗)翻译
  20. 物联网渐行渐近 你准备好了吗?

热门文章

  1. AE开发基础实验二(空间查询之按属性查询)
  2. 基于GAMS的电力系统优化分析
  3. 大数据时代:生活、工作与思维的大变革
  4. BlueJ 改为中文界面了!
  5. BCC-funccount
  6. G1和CMS的三色标记法及漏标问题
  7. 软件测试简历这样写,面试邀请停不下来!
  8. 简单模拟支付宝转账系统
  9. 基本思想(模拟)——鸡兔同笼+校门外的树+约瑟夫问题+装箱子问题+排列【POJ 1833】
  10. 用 Cocos Creator 快速制作打地鼠游戏