美文网首页
js基础阵营:变量篇之特殊变量-数组

js基础阵营:变量篇之特殊变量-数组

作者: 来瓶二锅头00 | 来源:发表于2022-03-20 23:06 被阅读0次

    前面我们以及说过了,变量的一些基础知识,这章我们将来看看特殊一个变量数组。在其他语言中我们可以知道,数组一般存储的是相同类型的数据且是固定数量的,不允许不同也不允许随意改变长度,但是由于js的天然弱语言类型,所以我们的数组中可以存储不同类型的数据。同时可以动态调整数组的长度。下面我们来进入数组的世界

    一:数组的创建

    在js中我们有两种方法,

    1.1 Array构造函数

    第一种采用Array构造函数,其构造函数接受两种数据格式,如果参数为数字且只有一个参数,则创建传入参数大小的数字,如果是非数字,则根据arguments来创建数组。我们来看以下代码

    var a = new Array(12);   // [empty*12]
    var b = new Array('1','2','3') // [1,2,3];
    
    1.2 数组字面量

    数组字面量方法是通过[],每一项通过逗号分隔

    var a = [1,2];
    var b = [];
    
    二:数组的检查以及转换
    2.1 数组的检查

    我们在前面已经说过可以通过typeof 方法来检查数据的类型,那么我们看下下面的代码

    typeof [1,2];//object
    

    我们在前面说到过,通过typeof方法只能返回6大数据类型(参看数据类型篇)所以我们在这里需要通过另一个方法来判断,那就是通过instanceof Array方法来判断

    [1,2] instanceof Array;// true
    

    所以如果我们需要判断一个数据是否是数组,我们可以通过以下方法来判断

    function isArray(data){
        return typeof data === 'object' && data instanceof Array;
    }
    

    当然我们还有更简单的检查方法,那就是通过Array.isArray来判断

    Array.isArray([1,2,3])  // true
    
    2.2 数据转换

    在上一章数据类型转换中我们提到了对象的数据转换。我们在这章中详细看下一个数组转换成字符串的过程。例如我们现在需要将一个数组[1,2]转换成字符串

    var a= [1,2];
    //1:首先执行数组的valueOf 方法
    console.log(a.valueOf())//返回[1,2]
    // 2:有valueOf方法,返回值不是基本数据类型。调用toString方法
    console.log(a.toString())//'1,2'
    

    根据上面的步骤我们可以实现我们的底层实现方法

    function obj2str(data){
        if(Object.hasOwnProperty.call(data,'valueOf') && ['number','string','number'].includes(data.valueOf())) {
          return data.valueOf();
        } else {
          return data.toString();
    }
    
    3:常见方法

    push(元素):从数组的尾部添加元素
    unshift(元素):从数组的头部添加元素
    pop():从数组的头部移除元素
    shift():从数组的尾部移除元素
    sort(function?)数组的升序,具体的规则根据所传入的方法来定,如果没有传入方法则采用默认规则通过冒泡排序[算法排序篇](后面补充后添加)进行升序,默认规则如下:
    1:将前项与后项转换成字符串
    2:如果前项在后项前面,则返回false,不升序,相同不变,否则,返回ture,升序
    因此我们可以来实现底层的sort基本升序规则方法

    var a = [1,3,2,4];
    a.sort((a,b)=> a-b;)
    

    reverse(function?)数组的降序,规则同sort
    concat(a,b....)创建一个新数组,将数组进行合并,不会改变原有的数组
    slice(number1,number2?)创建一个新数组,从原有数组的number1位置,直到number2索引位置数据,如果number2不存在,则到最后,如果number存在,且是正整数,则直接到number2所在所在索引,如果是负数,则到数组长度+number2。如果相加后以及原本起始位置,小于结束位置,则返回空数组。所以我们可以实现下底层代码逻辑

    Array.property.slice = function(){
      var  stat = arguments[0];
      let num2 = arguments[1];
      var end = this.length;
      if(num2) {
          if(num2 < 0) {
            end = this.length + num2;
          }
          if(start >= end) {
              //返回空数组
          } else {
              //取stat-数组末尾间的数据返回
          }
      } else {
          //取stat-数组末尾间的数据返回
      }
    }
    

    splice(index,number?,元素?):从原有数组中移除或者添加或者替换元素,如果number存在,且大于0,则将原有数组index位置处的数据移除,且返回。如果需要添加的元素(可以是多个)存在,则将需要添加的元素插入到index位置处
    indexOf(需要查找的元素|function):如果传入的是元素,则从数组中找到此元素的位置,不在数组中返回-1.如果传入的是函数,则会按照函数的规则进行查找。
    lastIndexOf(需要查找的元素|function)查找最后的一个匹配的,规则同inexOf
    every(function)根据传入的函数,来判断数组中的每一项是否都满足,如果都满足,返回true,否则返回false
    some(function)根据传入的函数,来判断数组中的是否有一项满足,如果有一项满足,返回true,否则返回false
    filter(function)根据传入的函数,来过滤数组中的每一项,返回满足调条件的元素的数组
    forEach(function)根据传入的函数,来对数组的每一项进行处理,不返回任何信息
    map(function)根据传入的函数,返回每一项执行后的结果数组
    reduce(function(pre,current,index,array))根据传入的函数,来对前一项和当前项进行归并处理,返回最终值
    reduceRight(function(pre,current,index,array))根据传入的函数,来对前一项和当前项进行归并处理,返回最终值,但是其方法是从数组的最后一项开始
    至此关于数组以及常见方法,我们就说到这了,下一章我们将来看看另一个特殊的变量,函数

    相关文章

      网友评论

          本文标题:js基础阵营:变量篇之特殊变量-数组

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