美文网首页
数组方法

数组方法

作者: 明明你也一样 | 来源:发表于2019-10-02 11:03 被阅读0次

    检测数组

    let arr = []
    arr instanceof Array // true
    // instanceof操作符的问题在于,如果存在多个不同的全局执行环境,从而有多个Array构造函数,就会导致无法确定数组实例
    
    // 为了解决这个问题,ES5新增Array.isArray()方法
    Array.isArray(arr) // true
    

    转换方法

    toString

    把数组转换成字符串,并用逗号分隔开来

    let arr = ['red','green']
    arr.toString() // 'red,green'
    

    join

    把数组转换成字符串,并用指定的字符分割开来
    注意:如果数组里的某项是null或undefined,那么该值转化成字符串时是空字符串

    let arr = ['red', 'green']
    arr.join('|') // 'red|green'
    

    字符串的split()与它相反,用指定字符分割并组成数组

    let str = 'red,green'
    str.split(',') // ['red', 'green']
    

    栈方法

    push

    push()方法可以接收任意数量的参数,并把它们逐个添加到末尾
    并返回修改后数组的长度

    let arr = []
    arr.push('red') // 返回1
    

    pop

    pop()方法移除数组的最后一项,并且返回移除项

    let arr = ['red']
    arr.pop() // 返回'red'
    

    队列方法

    shift

    shift()把数组的第一项移除并且返回移除项

    let arr = ['red', 'green']
    arr.shift() // 返回'red'
    

    unshift

    unshift()可以接收任意数量的参数,并把它们添加到数组前端
    最后返回数组的长度

    let arr = []
    arr.unshift('red') // 返回1
    

    重排序方法

    reserve

    反转数组的顺序

    var arr = [1, 2]
    arr.reverse() // [2, 1]
    

    sort

    默认情况下升序排序
    把每个元素先toString(),然后再比较大小,所以不适用于数字比较

    // 不是想要的排序
    let arr = [10, 5, 1]
    arr.sort() // [1, 10, 5]
    

    使用比较函数排序

    // 正确的排序
    let arr = [10, 5, 1]
    arr.sort(function(a, b) {return a - b}) //  [1, 5, 10]
    

    操作方法

    concat

    基于当前数组创建一个新的数组(拼接数组)
    具体来说,这个方法会先创建一个当前数组的副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。

    let arr1 = ['red']
    let arr2 = arr1.concat('green', ['black', 'yellow'])
    arr2 // ['red', 'green', 'black', 'yellow']
    arr1 // ['red']
    

    slice

    基于当前数组中的一项或多项创建一个新的数组(截取数组)
    原来的数组不会改变

    let arr = ['red', 'green', 'yellow']
    arr.slice() // 复制一个新的数组
    arr.slice(1) // 从第1项开始复制,返回新的数组 ['green', 'yellow']
    arr.slice(1, 3) // 从第1项开始复制, 复制到第3项为止(但是不包括第3项),返回新的数组 ['green', 'yellow']
    如果参数有负数,则负数用数组的长度加上该负数来确定
    如果结束位置小于开始位置,则返回空数组
    

    splice

    splice会破坏原来的数组

    删除

    两个参数
    splice(从第几项开始删除, 删除几个)
    返回被删除的数组

    let arr = ['red', 'green', 'yellow']
    arr.splice(1, 2) // 从第1项开始,删除2个元素,返回 ['green','yellow']
    arr // ['red']
    
    插入和替换

    三个参数及以上
    splice(从第几项开始删除, 要删除的项数, 要插入的项)
    返回被删除的数组

    let arr = ['red', 'green', 'yellow']
    arr.splice(1, 2, 'black', 'purple')  // 从第1项开始,删除2个元素,然后从第1项开始添加
    arr // ['red', 'black', 'purple']
    

    位置方法

    indexOf()、lastIndexOf()分别从开头/末尾开始查找
    返回指定元素在数组中的位置,如果没有,则返回-1

    let arr = ['red', 'green']
    arr.indexOf('green') // 1
    
    // 可选的第二个参数表示从哪个位置开始找,默认为0
    let arr = ['red', 'green','black']
    arr.indexOf('green', 2) // -1
    

    迭代方法

    每个方法都接收两个参数

    • 第一个参数是在每一项上运行的函数,该函数又接受三个参数,分别是数组项的值,该项在数组中的位置,数组本身
    • (可选的)第二个参数是运行函数时的this指向(默认是window)

    every

    如果函数对每一项都返回true,则返回true(查询是否满足某个条件)
    如果有一项返回false,则直接返回false,并且不会再对后面的项运行函数

    some

    如果函数对某一项返回true,则返回true(查询是否满足某个条件)
    如果有一项返回true,则直接返回true,并且不会再对后面的项运行函数

    var arr = [1, 2, 3, 4, 5]
    arr.every(function(item, index, arr) {
        return item > 2
    }) // false
    arr.some(function(item, index, arr) {
        return item > 2
    }) // true
    

    fliter

    对数组中的每一项运行给定函数,返回函数会返回true的项组成的数组

    // 返回大于2的项
    var arr = [1, 2, 3, 4, 5]
    arr.filter(function(item, index, arr) {
        return item > 2
    }) // [3, 4, 5]
    

    map

    对数组中的每一项运行给定函数,返回每次函数调用结果组成的数组

    // 每项的两倍
    var arr = [1, 2, 3, 4, 5]
    arr.map(function(item, index, arr) {
        return item * 2
    }) // [2, 4, 6, 8, 10]
    

    forEach

    对数组的每一项运行给定函数,没有返回结果
    就是for循环的代替而已

    var arr = [1, 2, 3, 4, 5]
    arr.forEach(function(item, index, arr) {
        // 执行某些操作
    })
    

    归并方法

    reduce

    从第一项开始,逐个遍历到最后
    接受两个参数

    1. 第一个参数是每一项上调用的函数
      该函数又接受4个参数,分别是:前一个值, 当前值, 当前项的索引, 数组对象
      这个函数的返回值会作为第一个参数自动传给下一项
      第一次迭代发生在数组的第二项,因此第一个参数是数组的第一项,第二个参数是数组的第二项

    2. (可选的)第二个参数是作为归并基础的初始值

    // 计算数组每项之和
    // 第一次迭代,prev是1,cur是2, 返回3
    // 第二次迭代,prev是3,cur是3, 返回6
    var arr = [1, 2, 3]
    arr.reduce(function(prev, cur, index, arr) {
        return prev + cur
    }) // 6
    

    reduceRight

    类似,只是从最后开始遍历到第一项。

    相关文章

      网友评论

          本文标题:数组方法

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