• js数组


    <script>
    var arr=[1,2,'a'];
    arr.length=5;
    p(arr[3]); //undefined
    arr.length=1;
    p(arr[1]); //undefined
    </script>

    数组的枚举
    数组长度上限2的32次方

    <script>
    var arr=['f',1,2,'a','b','c'];
    for(var k in arr){
        p(arr[k]);
    }
    //for in有时无法保证枚举顺序
    for(var i=0;i<arr.length;i++){
        p(arr[i]);
    }
    /*
    f
    1
    2
    a
    b
    c
    */
    //v 数组的值,key下标,ar数组对象
    arr.forEach(function(v,key,ar){
        ar[key]=v+"_";
    })
    p(arr);//f_,1_,2_,a_,b_,c_
    p(Object.keys(arr));  //0,1,2,3,4,5
    p(Object.getOwnPropertyNames(arr));//0,1,2,3,4,5,length
    p(arr.__proto__==Array.prototype); //true
    p(Object.getOwnPropertyNames(Array));// length,name,arguments,caller,prototype,isArray,observe,unobserve
    </script>

    Array类的属性

    p( Array.isArray(arr)) //true or false

    <script>
    var arr=['f',1,2,'a','b','c'];
    p( arr.constructor);//function Array() { [native code] }
    p(Array.constructor);//function Function() { [native code] }
    p(Array.prototype.constructor);//function Array() { [native code] }
    p(arr.constructor==Array.prototype.constructor);//true
    
    var arr=['f',1,2,'a','b','c'];
    var a='w';
    var arr1=['q','w1'];
    var b=arr.concat(a,arr1);
    p(b);//f,1,2,a,b,c,w,q,w1
    var c='a'.concat('b');
    p(c);//ab
    </script>

    Array.prototype对象的属性

    every

    <script>
    var arr=['f1',1,2,'a','b','c'];
    function callback(element,index,arrobj){
        return arrobj[index]=element+'_';
        //此函数必须return true默认return false,到return false就停止执行
    }
    arr.every(callback);  //true
    p(arr);//f1_,1_,2_,a_,b_,c_
    </script>

     filter

    <script>
    var arr=['f1',1,2,'a','b','c'];
    function callback(element,index,arrobj){
        if(!isNaN(element)) return true;
    }
    var arr1=arr.filter(callback);  //true
    p(arr1);//1,2
    </script>

     indexOf()

    <script>
    var arr=['f1',1,2,'a','b','c','a'];
    var r=arr.indexOf('a',3); //3  第二个参数不传的话默认从开始查找
    var r1=arr.indexOf('a',4);//6
    p(r,r1);//3,6
    p('abc'.indexOf('c'));//2
    </script>

     join

    <script>
    var arr=['f1',1,2,'a','b','c','a'];
    var str=arr.join('-');
    p(str);//f1-1-2-a-b-c-a
    </script>

     lastIndexOf()

    <script>
    var arr=['f1',1,2,'a','b','c','a','d'];
    var r=arr.lastIndexOf('a',7);
    var r2=arr.lastIndexOf('a',3);
    p(r,r2);//6,3  找不到就返回-1
    </script>

    map()

    <script>
    var arr=['f1',1,2,'a','b','c','a','d'];
    function callback(element,index,obj){
        obj[index]=element+"__";
        return element+"_";
    }
    var arr1=arr.map(callback);
    p(arr1);//f1_,1_,2_,a_,b_,c_,a_,d_
    p(arr);//f1__,1__,2__,a__,b__,c__,a__,d__
    </script>

    pop()

    <script>
    var arr=['f1',1,2,'a','b','c','a','d'];
    var arr1=arr.pop();//d
    p(arr,arr1);//f1,1,2,a,b,c,a       d
    </script>

     reduce(callbackfn[,initialValue);

    callbackfn函数对数组计算,返回最后一次计算结果
    callbackfn(x,y)
    如果在调用reduce时有初始值,那么x就做为初始值
    y依次为数组元素
    如果没有初始值
    数组第一个元素作为初始值,y为从第二个元素开始的数组元素

    <script>
    var arr1=[5,2,3,4,'a'];
    function callback(x,element){
        p(x+":"+element);
        return x+"_"+element;
    }
    var r=arr1.reduce(callback);
    p("<hr>");
    p(r);
    /*
    没初始值得结果
    5:2
    5_2:3
    5_2_3:4
    5_2_3_4:a
    ------------------------
    5_2_3_4_a
    有初始值得结果   r=arr1.reduce(callback,'init');
    init:5
    init_5:2
    init_5_2:3
    init_5_2_3:4
    init_5_2_3_4:a
    -----------------------------------
    init_5_2_3_4_a
    */
    </script>

    reduceRight(callbackfn,[,initval])
    从数组的末尾向前执行reduce操作
    reverse数组转置

    <script>
    var arr=['f1',1,2,'a','b','c','a','d'];
    arr.reverse();
    p(arr);//d,a,c,b,a,2,1,f1
    </script>

     shift删除数组的第一个元素,并返回该元素

    <script>
    var arr=['f1',1,2,'a','b','c','a','d'];
    p(arr.shift());
    p(arr);
    </script>

     unshift(item0,item1)

    添加元素导数组开头,返回添加后数组的长度

    <script>
    var arr=['f1',1,2,'a','b','c','a','d'];
    p(arr.unshift('first','second'));//10
    p(arr);//first,second,f1,1,2,a,b,c,a,d
    </script>

    slice(start,end)生成一个下标从start到end的新数组

    <script>
    var arr=['f1',1,2,'a','b','c','a','d'];
    p(arr.slice(1,4));//1,2,a
    p(arr);//f1,1,2,a,b,c,a,d
    </script>

    splice(start,delcount,[item0,item1,...])
    删除下标由start开始的delcount个元素,如果指定第三个参数,则将该参数插入到start的位置
    返回删除的元素

    <script>
    var arr=['f1',1,2,'a','b','c','a','d'];
    p(arr.splice(1,2));//1,2
    p(arr);//f1,a,b,c,a,d
    
    var arr=['f1',1,2,'a','b','c','a','d'];
    p(arr.splice(1,2,'new','nn'));//1,2
    p(arr);//f1,new,nn,a,b,c,a,d
    </script>

    some(callbackfn[,thisarg]) 以此对数组中的元素应用callbackfn,如果callbackfn返回true则终止
    callbackfn(数组元素,下标,数组对象)

    <script>
    var arr=['f1',1,2,'a','b','c','a','d'];
    function callbackfn(element,index,arrobj){
        p(element+":"+index+":"+typeof arrobj);
    }
    arr.some(callbackfn);
    </script>

    toLocaleString();//将数组转换为与地区相关的字符串类型
    toString转换为字符串

    <script>
    ar arr=['f1',1,2,'a','b','c','a','d'];
    var r=arr.toLocaleString();
    var r1=arr.toString();
    p(r,r1);
    p(typeof r,typeof r1);
    </script>

     toSource();

    sort排序自定义排序规则 

    <script>
    var arr1=[1,30,2,4];
    var arr2=arr1.sort(function(a,b){
        return a-b;
    });
    p(arr1,arr2);//均是1,2,4,30
    //默认按照 1,2,30,4
    //如果不调用 sort了的参数,排序是通过对unicode编码值得大小比较来实现的
    </script>

    js数组含有很多破坏性方法(使用该方法后原数组也被改变)
    pop,push,reverse,shift,sort,splice,unshift
    可使用freeze方法使其免遭破坏
    Object.freeze(arr);
    之后再调用破坏性方法 就会报错了

    数组的复制
    由于js里的数组是对象
    数组赋值时带入的只是其引用,因为实际上并没有复制数组元素,仅仅是将某一个变量指向了同一个数组实体而已 

    <script>
    var arr1=[1,30,2,4];
    var arr2=arr1;
    arr2.push(5);
    p(arr2,arr1);  //arr2改变时,arr1也改变,两者指向同一个实体
    </script>

    通过contact,slice对数组赋值

    <script>
    var arr1=[1,30,2,4];
    var arr2=[].concat(arr1);
    arr2.push(5);
    p(arr2,arr1);
    //1,30,2,4,5
    //1,30,2,4
    //通过slice对数组进行赋值
    
    var arr1=[1,30,2,4];
    var arr2=arr1.slice(0,arr1.length);
    arr2.push(5);
    p(arr2,arr1);
    //1,30,2,4,5
    //1,30,2,4
    </script>

    元素的删除

    方式1
    <script>
    var arr1=[1,30,2,4];
    delete(arr1[1]);
    p(arr1);//1,,2,4
    p(arr1[1]);//undefined
    p(arr1.length);//4  长度还没改变
    //方法2
    var arr1=[1,30,2,4];
    arr1.splice(2,1);
    p(arr1,arr1.length);
    //1,30,4
    //3
    </script>

    过滤

    <script>
    var arr=['zero','one','two','three','four'];
    var p1=arr.map(function(e){
        return e.length
    }).filter(function(e){
        return e%2==0;
    });
    p(p1);//[4,4]  数组
    </script>
  • 相关阅读:
    CSS进阶(八) float
    CSS进阶(七)vertical-align
    CSS进阶(六) line-height
    CSS进阶(五)border
    CSS进阶(四)margin
    CSS进阶(三)padding
    ORA-01555 snapshot too old
    Ubuntu14.04LTS安装引发的蛋疼
    rancher 2 安装 longhorn
    rancher2 挂载ceph-rbd
  • 原文地址:https://www.cnblogs.com/HKUI/p/4237269.html
Copyright © 2020-2023  润新知