JS 数据结构-数组 声明数组 常用数组方法

£可爱£侵袭症+ 提交于 2019-12-05 15:46:29

数组

  一个标识符,存储多个不同数据类型的数据。

声明数组

  格式1:

    字面量方式 (推荐)
    关键词  标识符 = [数据];
  例    let    i   = [1,"A",undefined];
  
  中括号中的每个数据之间的分隔符是逗号,每个数据称为元素;
  每个元素都会有自己在数组中唯一的索引(下标),可以通过数组的索引进行元素获取。

注:数组索引的起始值为0;
  i[1] 即得到数组中的第2个元素 "A"。
  获取一个不存在的下标会得到undefined不会报错。

  格式2:

    构造函数方式
    关键词  标识符  = new Array();
  例    let    i    = new Array();
  Array()小括号里面可以定数组的长度,但是没意义,因为JS数组是不定长的,可以随意添加;
  也可以直接写入数据Array(1,"A",undefined),但是...反正推荐字面量方式。

  

 

 

 

  字面量与构造函数方式的区别

    字面量比构造函数的解析速度更快(效率高)。
    原因:
      字面量属于JSON格式,可以直接被JS引擎进行解析。
      构造函数则需要先调用构造函数,再进行JS引擎解析。
 

数组的解构  ES6 

  把引用数据类型转换成基本数据类型;

  ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。

  

  

 

 

注:严格来讲右侧内容能够遍历、可以枚举,如对象、字符串或函数的参数,都可以解构。
 

数组的遍历

  方式一

    

    此处 i 相当于数组的下标。

   方式二

    

 

     此处 i 就是数组的每一项的值。

  方式三

    

 

     for in本身其实是拿来获取下标的,但也可以这么获取每个的值;

    获取下标就是直接输出i,值得注意的是,它返回的值是字符串类型。

数组的属性

  常用的属性就一个:length;设置 length 属性可改变数组的大小。

  如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失。

  如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为 undefined。

  注:如果用方式三遍历数组,得不到新元素的值(undefined),貌似没有直接赋值就得不到,

    方式一和方式二可以得到。

数组的方法

增加元素

  push()    在数组后面添加:  let x = arr.push("F67",345,3000);//可以一次添加多个值

  unshift() 在数组前面添加:  let y = arr.unshift("F54",110,500);

  注:返回值为添加数据后数组的长度。

   concat()  对原数组建立一个副本,在副本的基础上添加元素,返回一个新的数组,不会改变原数组的内容。

  

 

 

 

删除元素

  

 

批量获取数组中的数据

  slice(参数1,参数2)  没有满足条件的内容时,会返回一个空数组 。

  参数1是获取数组的起始位置,参数2是获取数组的结束位置;
  取的数据,不包含结束位置的内容, 即获取数组中从参数1开始,到参数2前一位之间的内容。
   特点:
    1、不会改变原数组的内容
    2、如果参数给的是负值,则用数组的长度与其相加。
    3、如果不满足,则返回空数组
    4、如果有一个参数,则获取从该位置到数组最后一个的内容。
    

 

 

删除、修改、插入

  splice()  返回删除的内容。

  直接改变原数组。

  删除:

    只有1个参数,就是从这个参数的位置开始,到数组最后的内容删除。

    2个参数,参数1:起始位置,参数2:个数,即从参数1开始,往后删除多少个内容。
    

 

  修改或插入:
    3个参数,参数1:起始位置,参数2:个数,参数3:修改的值, 即把参数1到参数2的内容替换成参数3的值。
    3个参数,参数1:起始位置,参数2:0,参数3:修改的值,即在参数1位置前面插入参数3的值。
 
    超过3个参数, 参数1:起始位置,参数2:0或个数,
    参数3:修改或插入的值...,参数n:修改或插入的值,从第3个参数开始,都是要进行插入或修改的值。
    把参数3到参数n的值依次覆盖到原数组参数1后面删除的位置上,删了多少覆盖多少,多的添加上去。
     

   注:没有满足条件的内容或删除0个(参数2为0)时,会返回一个空数组 。

 

数组与字符串的转换

  字符串转数组

    

 

 

  数组转字符串

    

 

扩展运算符

  ...    三个点:扩展运算符

  

 

 

查找内容

返回查找内容的下标

  indexOf()   从前往后找第一个满足的。

  lastIndexOf()  从后往前找第一个满足的。

注:如果没有满足的(即查找的内容在数组中不存在),则返回-1。
 

判断是否存在要查找的内容

  indexOf()    存在返回true,不存在返回false。

判断数组中是否有重复值

  方式一:

      

 

  方式二:

      

 

 

数组的倒序排列

  会改变原数组的内容:

    arr.reverse();//返回倒序过后的新数组

 

数组的升序和降序  (number类型)

   数组本身有 sort()排序方法,调用该方法时没有参数,会按字母顺序对数组中的元素进行排序,字符编码的顺序。

   因此需要把数组的元素都转换成字符串。如果要按照其他标准进行排序,要自己提供比较函数。

  

 

 

 

替换

  copyWithin()  把指定的元素,替换到相应位置(会改变原数组的内容)。

  参数1:从该位置进行替换
  参数2:获取指定元素的起始位置
  参数3:获取指定元素的结束位置(不包含结束的内容)
  注:如果不给参数3,就是参数2到最后所有都选中。
  

 

 

数据填充

  fill()  把指定的数据,填充到相应位置(会改变原数组的内容)。

  参数1:填充的数据

  参数2:填充的起始位置

  参数3:填充的结束位置(不包含结束)
  注:如果不给参数3,就是参数2到最后所有都选中。
  

 

数组清空

  三种方式:

    arr.splice(0);
    arr.length = 0;
    arr = [];

   都可以得到空数组,但是清空数组这个行为本身,真是有点多余。

 

判断数组中是否存在NaN

  因为NaN比较特殊,提一提,

  arr.includes(NaN);//可以正确返回是否存在

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!