JavaScript数据结构--数组
- ECMAScript数组的数据类型不单一
- 数组的大小是可以动态调整的
创建数组的方式:
1. Array构造函数
var colors = new Array();
//这里括号里可以填写数字表示数组长度length,也可以直接写入包含的项
*new操作符是可以省略的哟
2. 数组字面量
var colors = ["red", "blue"];
千万不要再数组字面量中写多余的逗号,在IE8-的版本中会增加一个undefined的数组项,而其他浏览器会忽略。
*使用数组字面量表示法时,不会调用Array构造函数。
数组的length属性:
- colors[3] = “black" 这里如果索引超过了已有的长度,那么就会增加一个项;
- length属性不是只读的,可以利用它删除末尾的一部分或者修改末尾元素;
- 因为数组的索引从0开始,所以length总是指向最末尾(即末尾元素的索引是length-1)。
1. 检测数组
- instance of操作符:假定单一的全局执行环境。如果网页中有多个框架,多个版本的Array构造函数则会出现问题。
- Array.isArray()方法:不管是在哪个全局环境创建的都可以,IE9+。
2. 转换方法
- toString()
- valueOf()
- toLocaleString()
三个方法调用同一数组一般会返回同样的结果,即数组项以逗号连接成的字符串。不同的是valueOf()和toString()方法是对数组的每一项调用toString()方法(alert()也是同样),而toLocaleString()则是对数组的每一项调用toLocaleString()方法。
- join()方法:使用不同的分隔符来构建字符串,默认值为逗号。
*如果数组中某一项是null或undefined,那么在上述方法返回结果中以空字符串表示。
3. 栈方法
- 栈:是一种LIFO(Last-In-First-Out,后进先出)的数据结构。
- push():接收任意数量的参数,把他们加到数组末尾,并返回修改后数组的长度。
- pop():从末尾移除一项,减少数组的length值,返回移除的项。
4. 队列方法
- 队列:是一种FIFO(First-In-First-Out,先进先出)的数据结构。
- shift():移除数组中的第一个项,并返回这个项。
- unshift():在数组前端加入任意个项,并返回新数组的长度。
由push()和shift()可以模拟队列。而unshift()和pop()可以模拟反向队列。
5. 重排序方法
- reverse():反转数组。
- sort():默认按照升序排列数组项。调用每个数组项的toString()方法,比较得到的字符串。需要比较函数作为参数。
比较函数:
function compare(value1, value2){
if (value1 < value2) {
return -1;
}else if (value1 > value2){
return 1;
}else {
return 0;
}
}
如果需要降序排列,将-1与1交换即可。
*reverse()和sort()的返回值都是经过排序后的数组。如果只是要反转原来的数组,使用reverse()更快一点。
*如果数组类型是数值或valueOf()方法会返回数值类型的对象类型,比较函数可以选取更加简单的:
function compare (value1, value2) {
return value1 - value2;
}
6. 操作方法
- concat()方法:创建一个新数组,将收到的参数加到原数组的末尾。
- slice()方法:返回指定位置截取出的一个数组。只有一个参数即为该位到结尾(按照0开始),两个参数则第二参数为结尾元素(不包括,可以为负数)。
- splice()方法:删除/插入/替换。第一个参数为开始位置,第二个参数为删除的数量,第三/四/······个为插入的数。返回删除的项组成的数组。
7. 位置方法
- indexOf():查找。接受两个参数,要查找的项和起点位置的索引(可选)。返回查找的项在数组中的位置,没有找到的情况下返回-1。
- lastIndexOf():从数组的末尾往前找。
*比较时使用的是全等操作符(要求严格相等)。
8. 迭代方法
ECMAScript定义了5个迭代方法,这些方法都接受两个参数,在每一项上运行的函数和(可选)运行该函数的作用域对象。而传入的函数接受三个参数,数组项的值,该项在数组中的位置,数组对象本身。
every() | 函数对每一项都返回true,则返回true |
filter() | 返回true的项组成的数组 |
forEach() | 无返回值 |
map() | 每次函数调用结果组成的数组 |
some() | 任一项返回true,则返回true |
9. 缩小方法
reduce()和reduceRight()是两个缩小方法,他们会迭代数组的所有项,然后构建一个最终的返回值。reduce()从第一项开始,reduceRight()从最后一项开始。
这两个方法接收两个参数,一个在每一项上调用的函数和(可选)作为缩小基础的初始值。
这个函数接收四个参数(prev, cur, index, array)(前一个值,当前值,索引,数组对象)。
第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数是数组的第二项。