function asc (a, b) { return a < b ? -1 : a === b ? 0 : 1; }
function desc (a, b) { return b < a ? -1 : a === b ? 0 : 1; }
var arr = ['yes', 'or', 'no'];
arr.sort(asc);
console.log(arr); // ['no', 'or', 'yes']
arr.sort(desc);
console.log(arr); // ['yes', 'or', 'no']
数字类型排序:
function asc (a, b) { return a - b; }
function desc (a, b) { return b - a; }
var arr = [3, 1, 2];
arr.sort(asc);
console.log(arr); // [1, 2, 3]
arr.sort(desc);
console.log(arr); // [3, 2, 1]
简介
数组是计算机编程世界里最常见的数据结构。任何一种编程语言都包含数组,只是形式上略有不同罢了。数组是编程语言中的内建类型,通常效率很高,可以满足不同需求的数据存储。
JavaScript中对数组的定义
JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数。然而,这些数字索引在内部被转换为字符串类型,这是因为 JavaScript 对象中的属性名必须是字符串。数组在 JavaScript 中只是一种特殊的对象,所以效率上不如其他语言中的数组高。
JavaScript 中的数组,严格来说应该称作对象,是特殊的 JavaScript 对象,在内部被归类为数组。由于 Array 在 JavaScript 中被当作对象,因此它有许多属性和方法可以在编程时使用。
下面代码论证上述观点:
可见,数组在JavaScript内部也是
object
类型;数组根据索引获取元素的时候,会自动将下标转化为字符串。数组创建
数组复制
这种方式把一个数组赋给另外一个数组时,只是为被赋值的数组增加了一个新的引用。我们称之为"浅拷贝",操作新的数组,会影响到旧的数组。对应的,我们也有”深拷贝“。
这个数组”深拷贝“操作并不完美,只针对数组元素中只有基本数据类型,若存在引用数据类型元素,则不适用。
数组方法
这里不展开,可以点击查看JavaScript Array 对象相关方法操作。
数组排序
定义:
这里重点讲解JavaScript中的数组排序,因为它很特别。例如我们要对一个字符串数组进行排序,可以这样写:
看上去很简单的调用
sort
方法,就能轻松地实现数组的排序。那么,某一天我按字符串首字母从大到小排序呢?当然我们可以这样做:我能不能通过
sort
方法就一步到位呢?这时候,我们就要用上sort
方法接受的参数sortby
了。注意,sortby
它代表的是一个函数的饮用,而不是一个boolean值。曾经天真的我以为sort(true)
,顺序排序;sort(false)
,逆序排序,然而并不是。我们看看官方对sortby
的定义:相信第一次读这个定义的同学也会和当初的我一样晕,没关系的,因为有我在。首先呢,这个
sortby
函数,是一个回调函数,就像我们平时事件绑定,ajax
回调函数一样,在数组排序过程中调用,并且注入了两个参数a
和b
。这两个参数有什么用呢?上面罗列了三点对这两个参数的用法,用我的话形容则是:字符串类型:
a < b ? -1 : a === b ? 0 : 1
,从小到大排序b < a ? -1 : a === b ? 0 : 1
,从大到小排序数字类型:
a - b
,从小到大排序b - a
,从大到小排序请看代码示例:
字符串类型排序:
数字类型排序:
如果好奇js数组中的原生
sort
方法是用什么排序算法的同学,可以点击这里查看。