• 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

    网上寻找 ,精简图

  • 相关阅读:
    Python中的编码
    编译gcc
    内存的非法读写操作的检查
    Git合并特定commits 到另一个分支
    局部静态变量是如何做到只初始化一次的?
    how-to-redirect-cin-and-cout-to-files
    Time series database
    Linux System Calls Hooking Method Summary
    tomcat 创建虚拟主机
    oracle查锁表SQL
  • 原文地址:https://www.cnblogs.com/gxl00/p/4730194.html
Copyright © 2020-2023  润新知