数组

作者: 凉风风 | 来源:发表于2017-10-16 22:36 被阅读0次

    数组是有序列表,每一项都可以保存任何类型的数据。数组的大小可以动态调整,可以随着数组的添加自动增长以容纳新增数据。

    创建方式

    • Array构造函数:参数可以是①项目个数②应该包含的项;可省略new操作符

    • 数组字面量表示法:此时不会调用Array构造函数

      • 数组的项数保存在length属性中
      • 数组的length属性不是只读的,通过这个属性还可以从数组的末尾移除项或向2数组添加项。主要是根据length值的大小变化的。
      • 数组最后一项的索引始终是length-1,因此下一个新项的位置就是length。

    检测数组

    确定一个对象是不是数组

    • 对于一个网页或者一个全作用域而言,可使用instanceof操作符

    instanceof存在的问题

    • 假定单一的全局执行环境,instanceof执行没有问题。
    • 如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,因此存在两个以上不同版本的Array构造函数。从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。

    解决方法:
    Array.isArray()方法:

    • 确定某个值到底是不是数组,而不管它在哪个全局执行环境中创建的。(IE9+)

    转换方法

    所有的对象具有的方法

    • toLocalString()
    • toString()
    • valueOf()

    数组调用

    • toString():返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。
    • valueOf():返回数组
    • toLocalString():经常返回与前两项相同的值,但是也会创建一个数组值以逗号分隔的字符串。唯一不同:未来取得每一项的值,调用的是每一项的toLocalString()方法,而不是toString()方法。
    • 例子:alert(arr):由于alert()会接收字符串参数,所以它会在后台调用toString()方法,由此会得到与直接调用toString()方法相同的结果。

    返回的数组项:

    • 前三者:返回的是以逗号分隔的数组项
    • join():使用不同的分隔符来构建这个字符串。
      • 只接受一个参数,用作分隔符的字符串,然后返回包含所有数组项的字符串
      • 参数为:不传入或者undefined则用逗号作为分隔符(IE7之前错误使用undefined作为分隔符)

    栈方法

    栈是一种LIFO的数据结构,也是最新添加的项最早被移除,栈中项的推入和弹出只发生在栈的顶部。用push()和pop()实现类似栈的行为。

    原理:

    • push()接收任意数量的参数,把它们逐个添加到数组的末尾,然后返回修改后数组的长度的值;
    • pop()从数组末尾移除最后一项,减少数组的length值,然后返回“移除的项”。

    队列方法

    队列数据结构的访问规则是FIFO。在列表的末端添加项,从列表的前端移除项。

    使用到两个方法:

    • push():从末端添加项;
    • shift():从前端取得项,移除数组中的第一项并返回该项,同时将数组长度减一。

    另一个方法:

    • unshift():在数组前端添加任意个项并返回新数组的长度。用途,相反的方向来模拟队列。

    反方向队列:

    • unshift():从前端添加项并返回新数组的长度;(IE7及之前,返回undefined而不是数组的新长度)
    • pop():末尾移除项,并返回被移除的那一项内容。

    重排序方法

    • reverse():反转数组项的排序,方法只管但不够灵活所以才有了sort()方法
    • sort():默认按升序排列数组项。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串【比较的是字符串!!!】
      • 可接收一个比较函数作为参数,一遍指定哪个值在哪个值前面(升序)
      • 第一个参数位于第二个之前——返回负数
      • 参数相等——返回0
      • 第一个参数应该位于第二个之后,返回一个正数
      • 用第二个字减第一个值
    • 两个方法返回的都是经过排序之后的数组。

    操作方法

    对包含在数组中的项提供了很多的方法。

    • concat():基于当前数组中的所有项创建一个新数组:先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,然后返回新构建的数组。
      • 没有给concat()传递参数:只是返回当前数组的一个副本
      • 参数是一个或多个数组:方法会将这些数组中的每一项都添加到结果数组中。
      • 参数不是数组:这些值就会被简单的添加到结果数组的末尾。
    • slice():基于当前数组中的一个或多个项创建一个新数组,不会影响原始数组。接收一两个参数:
      • 要返回项的起始和结束位置;从0开始计数
      • 一个参数:返回从该参数指定位置开始到当前数组末尾的所有项
      • 两个参数:返回起始和结束位置之间的项——但不包括结束位置的项。
      • 参数中有一个负数:用数组长度加上该数来确定相应的位置,结束位置小于起始位置——返回空数组。
    • splice():最强大的方法!!!
      • 中部插入项(始终返回一个数组,该数组包含从原始数组中删除的项)
        • 删除:两个参数——要删除的第一项的位置和要删除的项数。
        • 插入:3个参数——起始位置 0 和要插入的项;
        • 替换:3个参数起始位置、要删除的项数和要插入的任意数量的项
        • splice(起始位置,要删除的项数,要插入的项)

    位置方法

    indexOf()和lastIndexOf()接收两个参数:【要查找的项和(可选)表示查找起点位置的索引】,都返回要查找的项在数组中的位置,查找失败,返回-1.使用全等操作符,每一项必须严格相等。

    • indexOf():从数组的开头向后查找
    • lastIndexOf():从数组的末尾开始向前查找

    迭代方法

    定义5个迭代方法,对数组的每一项运行给定函数,每个方法接收两个参数:

    • 要在每一项上运行的函数:(接收三个参数)
      • 数组项的值、该项在数组中的位置和数组对象本身
    • 运行该函数的作用域对象——影响this的值(可选)

    方法:

    • every():对每一项都返回true——返回true
    • filter():返回true的项组成的数组!!!!!
    • forEach():没有返回值
    • map():每次函数调用的结果组成的数组
    • some():该函数对任一项返回true,则返回true
      不会修改数组中包含的值

    缩小方法

    迭代数组的所有项,然后构建一个最终返回的值。接收两个参数:一个在每一项上调用的函数和(可选)作为缩小基础的初始值

    • reduce():从数组第一项开始
    • reduceRight():从数组最后一项开始
      • 接收四个参数:前一个值、当前值、项的索引和数组对象。
      • 这个函数返回的任何值都会作为第一个参数自动传给下一个。
      • 第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数是数组的第二项。
      • 作用:reduce()方法可以执行求数组中所有值之和的操作

    相关文章

      网友评论

          本文标题:数组

          本文链接:https://www.haomeiwen.com/subject/jttruxtx.html