Javascript权威指南笔记-数组

稀疏数组

稀疏数组是包含从0开始的不连续索引的数组。他的length属性大于数组的个数。例如:

    var a = new Array(5)    // 数组没有元素,但是length是5
    a[1000] = 6             // length属性是1001
    
    var b = [1, 2, 3, 4]
    delete b[2]            // b变成了稀疏数组,但是length不变
复制代码

数组方法

  • join()

    将所有元素转换成字符串并连接在一起。

      var a = [1,2,3]
      a.join()              // 1,2,3
      a.join('-')           // 1-2-3
    复制代码
  • reverse()

    返回并将所有元素颠倒顺序。

      var a = [1,2,3]
      a.reverse()           // [3,2,1] 
    复制代码
  • sort()

    返回并排序的数组元素。如果包含undefined元素,则会排在数组最后。

      var a = [2,4,1]
      a.sort()            // [1,2,4]
      
      /* 按照一定规则排序 */
      a.sort(function(a,b){ return b-a })   // [4,2,1]     
    复制代码
  • concat()

    创建并返回一个新的数组。(不会扁平化数组的数组)

      var a = [1,2,3]
      a.concat(4, 5)            // [1,2,3,4,5]
      a.concat([4,5])           // [1,2,3,4,5]
      a.concat([4,5],[6,7])     // [1,2,3,4,5,6,7]
      a.concat([4,[5,6])        // [1,2,3,4,[5,6]]
    复制代码
  • slice()

    返回指定数组的一个片段或子数组。参数负数表示倒数。

     var a = [1,2,3,4,5]
     a.slice(0,2)            // [1,2]
     a.slice(-3,-1)          // [4,5]
    复制代码
  • splice()

    在数组中插入或删除元素。与slice()不同的是,splice()会修改调用的元素。该方法第一个参数指定插入或删除的位置。第二个参数指定了应该删除的个数。如果省略了第二个参数,则起始点到结尾的元素全部都会删除。

      var a = [1,2,3,4,5,6]
      a.splice(1,3)                 // a是[1,5,6],返回的是[2,3,4]
      
      var b = [1,2,3,4,5,6]
      b.splice(1,2,4,6)             // b是[1,4,6,4,5,6],返回的是[2,3]  
      
    复制代码
  • push()/pop() unshift()/shift()

在ECMAScript 5中的数组方法

ES5中数组方法都不会修改调用的原始数组。

  • forEach()

    遍历数组。

      var array = [1,2,3,4,5]
      array.forEach(function(item,index,a){
          console.log(item)        // 数组的元素
          console.log(index)       // 数组的索引
          console.log(a)           // 数组本身
      })    
    复制代码

    但是,该方法不能用break语句终止遍历,必须把forEach()方法放在一个try块中,并且抛一个异常。

      function foreach(a,f,t){
          try { a.forEach(f,t) }
          catch(e) {
              if (e=== foreach.break) return;
              else throw e;
          }
      }
      foreach.break = new Error('StopIteration')
    复制代码
  • map()

    将调用的数组的每个元素传递给指定的元素,并且返回一个数组。如果调用的数组是稀疏数组,则返回的也是稀疏数组。它具有相同的长度,相同的缺失元素。

      var a = [1,2,3]
      var b = a.map(function(item){
          return item*item
      })                  // b是[1,4,9]
    复制代码
  • filter()

    该方法返回的数组是调用数组的一个子集。根据调用函数的返回值是true和false来判断的。该方法会跳过稀疏数组中缺少的元素,他返回的数组总是稠密的。

      var a = [1,2,3,4,5]
      var b = a.filter(function(x){
          return x<3
      })                  // b是[1,2]       
    复制代码
  • some() 和 every()

    这两个方法是数组的逻辑判断。根据传入的函数逻辑判断,返回true和false。
    every()方法是当数组中所有元素调用判断函数都返回true时,返回true
    every()方法是当数组中至少有一个元素调用判断函数都返回true时,返回true

      var a = [1,2,3,4,5]
      a.erery(function(item){
          return a < 10
      })        // 返回true
      a.some(function(item){
          return a < 2 
      })        //  返回true
    复制代码

    该方法具有短路功能。every()当返回值有false时停止遍历。some()当返回值有true()时停止遍历。

  • reduce() 和 reduceRight()

    使用指定的函数将数组元素进行组合,生成单个值。这在函数式编程中常见。也可以被称为“注入”和“折叠”。

    reduce()需要两个参数,第一个是执行化简参数的函数。第二个是传给函数的初始值,省略的话,即是数组的第一个元素。空数组不传第二个参数会报错。

      var a = [1,2,3,4]
      var sum = a.reduce(function(x,y){return x+y},0)       // 数组求和
      var product = a.reduce(function(x,y){return x*y},1)   // 数组求积
      var max = a.reduce(function(x,y){return (x>y)?x:y})   // 求最大值
    复制代码

    reduceRight()与reduce()类似,但是他是按照索引从大到小进行处理数组的。

  • indexOf()和lastIndexOf()

    搜索整个数组中给定值得元素,返回第一个找到元素的索引,没有找到就返回-1。indexOf()是从头至尾搜索,lastIndexOf()是反向搜索。

数组类型

在es5中有Array.isArray()方法。

兼容性写法:

    var  isArray = Function.isArray || function(o){
        return typeof o === 'object' && Object.prototype.toString.call(o) === ["object Array"]
    }
复制代码

类数组对象

拥有数组方法的对象。

转载于:https://juejin.im/post/5aac7f3a51882555712c2057

你可能感兴趣的:(Javascript权威指南笔记-数组)