• JS数组详解


    JS数组的元素可以是对象或者其他数组

    JS数组是动态的,无需指定长度

    JS数组是JS对象的特殊形式

    1.

      var a = [ , ,]  有两个元素,都为undefined

      var b = new Array(10)  长度为10的数组。构造函数创建数组,一个参数则为指定长度,多个参数则为指定元素。

    2.

      了解稀疏数组是了解JS数组真实本质的一部分

    3.

      当数组length被设置为小于当前数组长度的非负整数n时,数组中索引值大于等于n的元素被删除

      当length被设置大于当前长度时,只是在数组尾部创建一个空的区域

      让length属性不能修改:

        var a = [1,2,3];

        Object.definedProperty(a,"length",{"writable:false"});  //让length属性只读

    4.数组方法:

      push():在数组末尾添加一个或多个元素,并返回数组的新长度

      unshift():在数组首部插入元素,其他元素依次后移,并返回新长度

      pop():删除数组最后一个元素,数组长度减1,并返回被删除的元素

      shift():从头部删除一个元素,返回被删除的元素,并所有元素依次前移

      splice():插入,删除,替换数组,会修改调用数组,并返回被删除的部分。位置从0开始,参数第一个为开始位置,第二个为个数,其后任意个参数指定了插入的元素,从第一个参数指定的位置插入

        var a = [1,2,3,4,5,6,7,8];

        a.splice(4);//返回[5,6,7,8],此时a为[1,2,3,4]

        a.splice(1,2);//返回[2,3],此时a为[1,4]

        a.splice(1,1);//返回[4],此时a为[1]

      slice():返回一个数组的一个片段或子数组,两个参数决定开始和结束位置,从第一个参数到第二个参数,但不包含第二个参数位置

      join():将数组所有元素都转化为字符串,并拼接在一起,返回最后生成的字符串,默认以“,”为分隔符,可以用参数指定分隔符。是String.split()的逆向操作:将字符串分割成数组

      reverse():将数组中的元素颠倒排序,返回逆序数组,采取替换方式,即对原数组产生影响

      sort():将数组的元素排序并返回修改后的数组,默认按字母表排序,undefined元素被排到最后,若不想按字母表排序,则传递一个比较函数

      concat():创建并返回一个新数组,元素包括原数组和concat()的每个参数

      toString()/toLocaleString():toString()与无参join()一样,用“,”连接为字符串;toLocalString(0是toString()本地化版本,即使用本地化的分隔符

    ECMAS5中数组方法:(都不修改原始数组,大多数方法第一个参数接收一个函数)

      forEach():遍历数组,不能再所有元素遍历完前终止,即无break,若想提前终止,则把forEach()放入try块中,并能抛出一个异常

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

        //求和:

        var sum = 0;

        a.forEach(function(value){sum += value;});

        //元素自加1:

        a.forEach(function(v,i,a){ a[i] = v + 1;});

      map():返回新数组,不修改调用的数组

        var a = [1,2,3];

        var b = a.map(function(x){return x*x;});

        b为[1,4,9]

      filter():按参数函数过滤数组,函数返回值为true则传递对应元素

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

        var b = a.filter(function(x){return x < 3});

        b为[2,1]

      every()/some():every()对应所有,some对应存在

        var a = [1,2,3];

        a.every(function(x){return x < 10});//返回true

        a.some(function(x){return x > 2});//返回true

      reduce()/reduceRight():将数组元素进行组合,生成单个值

        var a = [1,2,3];

        var sum = a.reduce(function(x,y){return x+y},0);//第一个参数为组合操作函数,第二个为传递函数的初始值,传给x,无第二个参数则用数组元素作为初始值

        reduceRight()按照数组索引从高到低处理,原理和reduce()一样

      indexOf()/lastIndexOf():搜索整个数组中具有给定值得元素,返回找到的第一个元素的索引,从0开始,若没有则返回-1。index0f()从头到尾,lastIndexOf()从尾到头,第一个参数为查找对象,第二个参数指定开始位置索引

    5.遍历优化:数组长度应该只查询一次

      for(var i = 0,len = a.length; i < len; i++){

        //排除null,undefined和不存在的元素

        if(!a[i]) continue;

        //跳过undefined和不存在的元素

        if(a[i] === undefined) continue;

        //跳过不存在的元素

        if(!(i in a)) continue;

        //或者for/in,不存在的索引不会被遍历到 :

        for(var i in a){}

        //跳过继承

        if(!a.hasOwnProperty(i)) continue;

        //跳过不是非负整数

        if(String(Math.floor(Math.abs(Number(i))))) continue;

      ECMA5新增遍历方法:forEach()

    6.

      判断数组类型:Array.isArray([])

    7.

      js数组的copy不能简单赋值,可以通过concat()或者slice()克隆

    8.

      空数组判断:

        var a  = [];

        a == [] ==> false

      应该通过a.length == 0 来判断

  • 相关阅读:
    Python random() 生成随机数
    【centos7】添加开机启动服务/脚本
    SSH远程会话管理工具
    resolv.conf 的超时(timeout)与重试(attempts)机制
    Linux系统中sysctl命令详解
    NMI watchdog: BUG: soft lockup
    nginx实现最简单的直播
    Linux下编译PHP常见错误及解决方法
    zbb20180919 db 数据库的水平分割和垂直分割
    zbb20180918 java servlet 重定向与请求转发的区别
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/6635408.html
Copyright © 2020-2023  润新知