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)(前一个值,当前值,索引,数组对象)。

第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数是数组的第二项。

posted @ 2020-07-01 16:50  HermionePeng  阅读(296)  评论(0编辑  收藏  举报