JS的数组

21 阅读5分钟

一、认识数组

数组是一种数据类型,他也是属于引用数据类型(复杂数据类型)

根据字面意思来看,存放数字的一个组合,但这样说有点片面了

更完善的说法:数组是存放一些数据的集合

换句话说:我们把数据放在一个盒子中,这个盒子就叫做数组

注意:数组内的数据是有顺序的

二、创建数组

2.1.字面量的方式

语法:var arr=[1, 2, 3, 'q', 'w', 'e']

2.2内置构造函数的方式

语法1:var arr=new Array()  创建一个空数组

语法2:var arr=new Array(5)  创建一个有长度的数组

语法3:var arr=new Array(1,2,3)  创建一个有内容的数组

三、数组的length属性

语法:数组名.length

length 翻译过来就是长度的意思

代表这个数组内有多少个成员

四、数组的索引

索引 也有人叫做下标  

就是指一个数据,在这个数组内排列在第几个位置上

注意:在JS中,索引(下标)是从0开始计数的

如果想要获取到数组指定位置的值,可以通过下标来获取

语法:数组名[下标]  --  能够获取到这个数组中对应下标的成员具体的值

五、遍历数组

想办法拿到数组的每一个成员

想拿到数组所有成员,需要先想办法拿到数组的所有下标

规律:所有数组的下标都是从0开始,然后到数组.length-1结束

六、冒泡排序

属于数组排序的算法之一

其实就是通过一种算法,将一个乱序的数组,调整为指定顺序的数组(从大到小/从小到大)

什么是算法?

解决某一个问题最简单/最高效的方式

    // 准备一个乱序数组,将数组内的数据用冒泡排序的方法,按照从小到大的顺序排列
    var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
    console.log('原始数组', arr)
    for (var j = 0; j < arr.length - 1; j++) {
      for (var i = 0; i < arr.length - 1 - j; i++) {
        if (arr[i] > arr[i + 1]) {
          var temp = arr[i]
          arr[i] = arr[i + 1]
          arr[i + 1] = temp
        }
      }
    }
    console.log('冒泡排序后的数组', arr)

七、选择排序

    var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
    //         0  1  2  3  4  5  6  7  8
    console.log('原始数组', arr)

    /**
     *        第几次循环  假设谁是最小值  和谁交换   内层循环从几开始
     * 
     * k===0      1           0           0             1
     * k===1      2           1           1             2
     * k===2      3           2           2             3
     * ……
    */
    var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
    //         0  1  2  3  4  5  6  7  8
    console.log('原始数组', arr)
    for (var k = 0; k < arr.length; k++) {
      var minIndex = k
      for (var i = k + 1; i < arr.length; i++) {
        if (arr[minIndex] > arr[i]) {
          minIndex = i
        }
      }
      var temp = arr[k]
      arr[k] = arr[minIndex]
      arr[minIndex] = temp
    }
    console.log('排序后的数组', arr)

八、数据类型之间的区别

数据类型分为两种

     1.基本数据类型(简单数据类型)

     2.引用数据类型(复杂数据类型)

1.存储

变量的数据存储的地方是内存中,内存分为两个 栈内存堆内存

基本数据类型: 存储在栈内存中,比如:string number undefined null boolean

复杂数据类型: 将数据样本存放在堆内存中,比如对象或者数组或者函数,

然后将指向该内存的地址,存放在数组名或者对象名或者函数名中

数组/对象/函数 名 存放在栈内存中

面试题:数据类型之间有什么区别?

          基本数据类型有哪些?然后他们存储的地方是栈内存中

          引用数据类型有哪些,然后他们数据本体存放的地方是堆内存中,然后变量名存储的位置是栈内存中

基本存储类型内部存储的是值;引用数据类型内部存储的是地址

2.赋值

基本数据类型:

赋值以后,两个变量之间没有任何关系,相当于将我自己的某一个东西,复制一份给你,然后你的就是你的,我的就是我的

     例子:我有一张考试卷,然后我复制一份给你,然后你在卷子上书写答案,并不会影响到我原本的这张卷子

复杂数据类型:

因为变量内部存储的是指向堆内存的地址,所以在赋值的时候,其实是将这个地址给到了另一个变量

     那么相当于这两个变量存储的是同一个钥匙,所以操作其中一个变量的时候,会影响另一个变量

      例子:我房间有一个开门的钥匙,我将我的钥匙复制一份给到你,那么此时我们两个共同拥有了一个房间的钥匙

      此时如果我对房间的布局做了修改,那么你进入房间的时候,能看到布局的修改

      此时如果你将房间所有的东西都偷走,那么我进入房间的时候,能看到房间所有东西都被偷走了

3.比较

基本数据类型: 就是值的比较

引用数据类型: 比较的时候,比较的是存储地址

4.传参

基本数据类型: 将值拷贝一份传递给形参,在函数内修改不会影响外界

引用数据类型: 将存储地址赋值给形参,在函数内修改会影响外界