Javascript中的sort()语法浅谈
来源:互联网 发布:js iframe 编辑:程序博客网 时间:2024/05/18 03:41
MDN中sort定义
MDN中是这样介绍sort()
函数的:sort() 方法对数组的元素做原地的排序,并返回这个数组。 sort 可能不是稳定的。默认按照字符串的Unicode码位点(code point)排序。
arr.sort([compareFunction])
语法说明
compareFunction
可选。用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的诸个字符的Unicode位点进行排序。
简单示例:
var tt = [23,12,34,1,560];console.log(tt.sort()); //此时sort()内没有参数//输出为 [1, 12, 23, 34, 560]
简单的说,sort()
在没有参数时,返回的结果是按升序来排列的。即字符串的Unicode码位点(code point)排序。
如果指明了 compareFunction(a,b)
,那么数组会按照调用该函数的返回值排序。记 a
和 b
是两个将要被比较的元素:
如果 compareFunction(a, b) (返回的值)小于 0 ,那么 a 会被排列到 b 之前,即参数a,b的顺序保存原样;
如果 compareFunction(a, b) (返回的值) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
如果 compareFunction(a, b) (返回的值)大于 0 , b 会被排列到 a 之前。即交换参数a,b的顺序
- compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。
一个栗子
Codewars上有这样一道kata,是这样的:给定一个包含对象的数组list和一个比较关键字sortBy(数组中对象的值总为数值,比较关键字总是存在,且是对象的某一个键),返回一个降序排序后的数组。
解决方案是这样的:
function sortList (sortBy, list) { return list.sort(function(a,b){ return b[sortBy]-a[sortBy] });}
Note
写给与我一样的初学者:
问题是上面的函数为什么不这样写:return b.a-a.b
我们这样尝试一下:
function sortList (sortBy, list) { return list.sort(function(a,b){ console.log(sortBy);//输出为b console.log(a.sortBy);//输出为undefined console.log(a[sortBy]);//输出为3,2,40 return b[sortBy]-a[sortBy] });}sortList('b',[ {a: 1, b: 3}, {a: 3, b: 2}, {a: 2, b: 40}, {a: 4, b: 12}]);
实际上,变量sortBy
的值为b
,但在代码a.sortBy
中,sortBy
的值并没有引用,sortBy
被认为是a
对象的一个属性,但a对象实际并没有sortBy
这个属性,所以该代码会输出为undefined
,因此我们要访问这类属性,应该写成a[sortBy
]的代码。
在这里,sortBy是一个变量名,如果变量名为某对象的属性,则只能通过[]
运算符进行对象属性的访问。
(待续)
- Javascript中的sort()语法浅谈
- javascript中的sort()
- javascript中的sort()方法
- javascript中的sort()方法
- JavaScript中的sort排序
- 浅谈 JavaScript array.sort(compare()) 实现原理.
- 浅谈JavaScript中的事件
- Javascript中的Var浅谈
- 浅谈javascript中的全局变量
- 浅谈javascript中的prototype
- 浅谈JavaScript中的prototype
- JavaScript中的排序函数sort
- JavaScript数组中的sort()
- Javascript 数组 中的 sort方法
- JavaScript中的sort排序问题
- 浅谈JavaScript中的原型模式
- 浅谈javascript中的加减时间
- 浅谈javascript中的defer、async
- 二叉树的递归遍历和非递归遍历(附详细例子)
- 大数据学习笔记·社会计算(2)
- mongoid--2d索引简介(index)
- 解决多线程代码中的 11 个常见的问题
- 动态链接库是如何建立的(3)如何查看到导出了那些函数?如何查看导入了哪些函数?
- Javascript中的sort()语法浅谈
- 【Effective C++读书笔记】篇一(导读~条款01)
- Runnable VS Thread
- 二叉查找树BST----java实现
- 安卓之appwibget
- nyoj-471 好多的树[容斥定理]
- 快速排序
- 设计模式-建造者模式(Go语言描述)
- 求最小值