美文网首页
数组详解

数组详解

作者: 没了提心吊胆的稗子 | 来源:发表于2019-07-05 16:16 被阅读0次

    数组的基础结构

    数组也是对象数据类型的 typeof [] -> 'object'
    数字作为索引,即每一项的属性名,length属性代表数组长度
    类数组 类似于但不是数组,有length属性,有索引
    1、getElementsByTagName获取的元素集合是类数组
    2、函数中的实参集合arguments是类数组
    for循环遍历数组的私有属性,for in循环除了数组私有属性,也可以遍历到一些自定义的数组的公有属性
    .......

    数组中的方法们

    console.dir(Array.prototype);
    1、方法的意义和作用
    2、方法的形参
    3、方法的返回值
    4、会否改变原有数组

    var ary = [1,2,3,4];
    

    实现数组的增删改
    增加

    • 1、push() 向数组末尾添加新元素
      参数:1到多个, 多个用逗号隔开,可以是任意类型
      返回值:返回新增后的数组长度
      原有数组改变

    • 2、unshift() 向数组开头添加新元素
      参数:同push
      返回值:返回新增后的数组长度
      原有数组改变

    • 3、用对象增加的方式添加新元素,键值对操作
      ary[ary.length] = 100; 向数组末尾添加新的元素

    删除

    • 1、pop() 删除数组最后一项(与push对应)
      参数:无
      返回值:被删除的元素
      原有数组改变

    • 2、shift() 删除数组第一项(与unshift对应)
      参数:无
      返回值:被删除的元素
      原有数组改变
      删完之后,后面元素的索引都会减一,对于大数组来说消耗就多了

    • 3、delete ary[index]
      把数组当作对象操作 其他项索引不会改变
      原有数组改变 length值也不会改

    • 4、ary.length -- 删除数组最后一项
      原有数组改变 length值会变

    splice: 数组的增加,修改,删除都可以实现

    • splice 删除
      splice(n,m): 从索引n开始删除m个,m不写删除到数组末尾
      splice(0) 清空数组
      splice() 不删除 返回空数组
      splice(0,1) 删除第一个
      splice(ary.length-1) 删除最后一个
      返回被删除的内容,以新数组的形式保存
      原数组改变

    • splice 修改,基于删除实现
      splice(n,m,x): 在原有删除基础上,用x代替删除的内容
      返回被删除的内容,以新数组的形式保存
      原数组改变

    • splice 增加,基于修改实现
      splice(n,0,x): 在原有修改基础上,把x插入到索引n的前面
      返回空数组 []
      原数组改变
      splice(0,0,x):向数组开头添加
      splice(ary.length,0,x):向数组末尾添加

    实现数组的查询
    slice
    参数:slice(n,m) 从索引m开始找到m处(不包含m)
    slice(n),从索引开始找到末尾并返回
    slice(0)/slice()数组克隆,返回原来数组的拷贝,三等号返回false,数组地址变了
    支持负数索引,会给传递的负数加上数组长度来处理
    返回值:找到的部分以一个新数组返回
    原有数组不变
    参数传递小数会向下取整,大于数组长度按数组长度处理,n > m会返回空数组

    拼接数组
    concat 将多个数组拼接在一起
    参数:拼接的内容,可以是数组也可以是元素
    返回值:拼接之后的数组(原数组在前)
    原有数组改变
    concat.concat() 数组克隆 同slice,地址改变跟原来数组不相等
    也可以实现向数组末尾添加元素

    数组转字符串
    toString
    参数:无
    返回值:转换的字符串
    原有数组不变
    join 把数组按照指定的分隔符转为字符串 和字符串中的split相对应
    参数:指定的分隔符(不指定跟toString效果一样)
    返回值:转换的字符串
    原有数组不变
    eval(ary.join('+')) 可实现数组求和

    var ary = [1,2,3,4,5];
    var sum = eval(ary.join('+'))
    

    数组每一项的排序和排列
    reverse 把数组倒过来排列
    参数:无
    返回值:倒列后的数组
    原有数组改变

    sort 实现数组排序(只能识别多位数中的第一个)
    参数:无或者回调函数
    返回值:排序后的数组
    原有数组改变

    ary.sort(function(a,b){
      return a-b;  // 升序
      return b-a;  // 降序
    })
    

    验证数组中是否包含某一项
    indexOf/lastIndexOf 获取当前项在数组中出现第/最后一次位置的索引
    数组中这俩方法IE6-8不兼容
    字符出中这俩方法所有浏览器兼容
    参数:要验证的元素
    返回值:若无返回-1,有返回元素的索引

    Array.prototype.myIndexOf = function myIndexOf(value){
      var result = -1;
      for(var i = 0; i < this.length; i ++){
        if(this[i] === value){
           result = i;  
           break;
        }
      }
      return result;
    }
    

    遍历数组中每一项
    这些方法在IE6-8下均不兼容
    forEach
    数组中这俩方法IE6-8不兼容

    ary.forEach(function (value, index){
      // 数组有多少项,当前回调函数就执行多少次,其中value是每一项的值,index是每一项的索引
    });
    

    map 在forEach的基础上可以修改数组每一项的值
    数组中这俩方法IE6-8不兼容

    ary.map(function (value, index){
      // 数组有多少项,当前回调函数就执行多少次,其中value是每一项的值,index是每一项的索引
      return xxx; // 返回的是修改后的每一项 即把当前项修改为xxx再返回
    });
    

    filter
    返回值:回调函数的结果为true的元素组成的新数组

    ary.filter(function (value, index){
      return value > 2;
    });
    

    every
    some
    返回值:true 或false
    every要求每一项都返回true结果才是true,some只需要有一项符合,就返回true
    像与和或

    var result = ary.every(function (value, index){
      return value > 2; 
    });
    console.log(result); // false
    var result = ary.some(function (value, index){
      return value > 2; 
    });
    console.log(result); // false
    

    reduce
    参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。初始值可以自己设置,不设置第一次就从数组的index为1开始,第一次的prev是数组的第一项
    空数组调用会报错,但设置初始值就不报错

    var  arr = [1, 2, 3, 4];
    var sum = arr.reduce((x,y)=>x+y);  // 求和
    var mul = arr.reduce((x,y)=>x*y);  //求乘积
    

    相关文章

      网友评论

          本文标题:数组详解

          本文链接:https://www.haomeiwen.com/subject/drajhctx.html