javascript Array总结

1.  创建

1     var a = [1,2.1,true,'abc']
2 
3   var b = new Array()
4 
5   var c = new Array(10)
6 
7   var d = new Array(1,2.1,true,'abc')

2.   数组为对象,继承Array.prototype,可以创建属性

  负数和非整数索引将自动转化为字符串作为数组的属性

  浮点数和整数相等的将转为整数,作为索引  a[1.00] == a[1]

  不存在“越界“问题,仅仅作为属性

  不连续索引的数组为稀疏数组。足够稀疏的数组通常在实现上比稠密数组更慢、内存利用率更高,查找元素时间与普通对象查找属性一样

  稀疏数组省略的元素默认undefined,

1 var a1 = [,,,]          0 in a1     // false  有地方说为true,测试多次仍是false 
2 var a2 = [undefined,,,]    0 in a2   //true
3 a1.length               // 3  数据直接量允许有可选的结尾逗号

3.   设置length为小于当前长度的非负整数n时,当前数组中那些索引大于等于n的值将被删除。

 Object.defineProperty(a1,'length',{writable:false}) //设置数组长度为只读,不能修改
delete a [1] // 不改变数组长度,使用后数组变稀疏数组
1 in a   // false 

4.   遍历优化

1 for(var i=0,len=a.length;i<a;i++){
2     if(!a[i])continue;
3    //dosomething
4 }

5.   Js 不支持真正的多位数组,可以数组中套数组

6.   ES3定义在Array.prototype中的方法

  1)      join(separator) , 通过指定的分隔符进行分隔连接所有元素,分隔符为空时默认为逗号,为String.split()的逆向操作

        var a1 = [1,2,3]      

        a1.join('+')       // 1+2+3

  2)      reverse() ,  颠倒数组中元素的顺序,不是排序, 改变原来的数组,不会创建新的数组。

        var a = [3,5,1]

        a.reverse()       // a = [1,5,3]

  3)  sort(function(a,b){}) ,  对数组的元素进行排序, 改变原来的数组,不会创建新的数组,

           如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。

       要实现这一点,首先把数组的元素都转换成字符串(如有必要),以便进行比较。

           如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。

      比较函数应该具有两个参数 a 和 b,其返回值如下:

          若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。

          若 a 等于 b,则返回 0。

          若 a 大于 b,则返回一个大于 0 的值。

          var a = [3,5,1]

           a.sort(function(a,b){
              return a-b
           })
           // a = [1,3,5]

  4)  concat(item...) ,  方法不会改变现有的数组,创建一个新数组

        var a = [1,2]

        concat(3,[4,[5,6]])  // [1,2,3,4,[5,6]]

  5)  slice(start,end) ,  返回一个包含从 start 到 end (不包括该元素)的新数组,不改变原数组,参数为负数时从尾部计算位置,end可省略

  6)  splice(index,num,item….) ,  向数组中添加/删除元素,返回被删除的元素组成的数组。该方法会改变原始数组,num省略默认删除到末尾

        var a = [1,2,3,4]

        var b = a.splice(1,1,[1],'b')  //a=[1, [1],'b',3,4]   b=[2]

        和concat()不同,splice会插入输入本身

  7)  push()  ,    数组尾部添加一个或多个元素,返回数组新长度

  8)  pop() ,    删除数组最后一个元素,减小数组长度并返回删除的值

  9)  unshift()  ,   和push() 类似,不过是从头部添加

        var a= [1,2]

        a.unshift(4,5)  // [4,5,1,2]  元素为一次性添加,并非逐个

  10)  Shift() ,      和pop()类似,从头部删除

  11)  toString() ,   和 没参数的join()返回值相同

7.   ES5 中的数组方法

      大部分方法第一个参数接收一个函数,数组中每个元素调用一次,稀疏函数中不存在的元素不调用,

    此参数函数有三个参数:数组元素,索引,数组本身,通常只用第一个

      1)  forEach(function(value,index,arr){})  ,   从头至尾遍历,所有元素没遍历完无法终止,除非放在try..catch 中并抛出异常

                     var a = [1,2,3,4]

         var sum = 0

         a.forEach(function(value){

                              sum += value    //累加 , 最终sum=10

         })

  2)  map(function(value,index,arr){})  , 不修改原数组,返回一个新数组,和原数组有相同的长度

                     var a = [1,,3]

         var b = a.map(function(value){

                              return value*value

         })   // b = [1,,9]

      3)  filter(function(value,index,arr){})  ,  不改变原数组,返回调用数组的一个自己,传递的函数用来逻辑判断,如果是true元素将会添加到子集中,

      会跳过稀疏函数中不存在的值,所以返回值都是稠密的

               var dense = sparse.filter(function(){return true})   // 压缩稀疏函数,返回稠密的

  4)  every() ,   当所有元素对传递的函数都返回true时 返回true,否则为false,当其中一个返回false时立即停止遍历并返回false,

       稀疏数组不存在元素不遍历

      5)  some() ,   当其中元素对传递的函数都返回true时 返回true,否则为false, 当其中一个返回true时立即停止遍历并返回true,

       稀疏数组不存在元素不遍历

      6)  reduce(function(x,y),default) ,   使用指定的函数将数组元素进行组合,生成单个值

             第一次调用function时x为default,接下来x为上次的返回值

             如果default没有指定,x,y 为数组的第一个和第二个元素,如果数组为空则报错

      7)  reduceRight 方法和reduce 相似,只是按照数组索引从高到低处理

      8)  indexOf(val),   寻找并返回值在数组中的索引,不存在返回-1

      9)  lastIndexOf(val) ,  从末尾开始寻找并返回值在数组中的索引,不存在返回-1

8.  判断变量是数组 var a = []

    ES3 

             var isArray = Function.isArray || function(o){

                     return typeof o === 'object' && Object.prototype.toString.call(o)==='[object Array]'

      }

    ES5

             Array.isArray(a)

9.  类数组对象  ,例如arguments,没有继承Array.prototype,不能直接使用数组方法,但是可以通过Function.call()

           var a = {'0':'a','1':'b',length:2}

           Array.prototype.join.call(a,'+')   // ‘a+b’

   在Firefox 中可以简写为 Array.join(a,’+’),但不是所有浏览器都可以,所以可以修改定义

           Array.join = Array.join || function(a.sep){

                 return Array.prototype.join.call(a,sep)

       }

10. ES5中字符串类似只读数组

    var s = 'javascript'

           console.log(Array.prototype.join.call(s,' '))  // j a v a s c r i p t

网上寻找 ,精简图

原文地址:https://www.cnblogs.com/gxl00/p/4730194.html