数组

156 阅读5分钟

1.数组介绍

  • 什么是数据?数组的概念
    • 数组的字面意思就是一组数据,
    • 数据类型可以是同种数据也可以是多种数据类型

2.数组的定义

  • 方式一:
    • new Array(参数1,参数2,...)参数为一个时,是数组的长度(new可以省略,但一般尽量写上)
var arr = new Array();//定义一个空数组
var arr = new Array(10);//定义一个长度为10的数组,没有赋值
var arr = new Array(1,2);//定义了一个有两个元素的数组
  • 方式二:
    • 字面量方式定义 (推荐使用)
var arr = [1,2,3,4,5];

3.数组的使用

3.1数组元素的获取(通过下标索引访问)

  • arr[0]:表示数组的第一个元素,0是下标,也叫索引
  • arr[1]:表示数组的第二个元素,1是下标
  • arr[length-1]:表示数组的最后一个元素,length-1是最后一个元素的下标

3.2数组的长度

  • arr.length是数组的长度,也是数组的个数
  • length属性:可读,也可以设置

3.3数组的赋值

  • 通过控制arr数组的索引进行给数组赋值
arr[0] = 10;//将10赋值给下标为0的元素
arr[2] = 20;//将20赋值给下标为2的元素

4.数组的常用方法

数组常用方法在这里分为两类:

会改变原数组的方法

  • pop(),push(),shift(),unshift(),sort(),reverse(),splice()
  • pop() 删除数组的最后一个元素,返回删除元素,会改变原数组
 var arr = [11,22,33,44,55];
 console.log(arr.pop());
 console.log(arr);
  • push() 往数组后面添加元素,根据参数数量,添加一个或多个值,返回新数组的长度,会改变原数组
var arr = [11,22,33,44,55];
console.log(arr.push("66","77"));
console.log(arr.push(88));
console.log(arr);
  • shift() 删除数组的第一个元素,返回被删除的元素,会改变原数组
var arr = [11,22,33,44,55];
console.log(arr.shift());
console.log(arr);
  • unshift() 从元素前面添加元素,根据参数数量,添加一个或多个值,返回新数组的长度,会改变原数组
var arr = [11,22,33,44,55];
console.log(arr.unshift(66));
console.log(arr);
console.log(arr.unshift(7,7));
console.log(arr);
  • sort() 排序,默认是根据ASCII码,进行比较排序
  • 0-9 48-57
  • a-z 97-122
  • A-Z 65-90
var arr = [2,5,4,76,92,4];
arr.sort(function (a,b) {
    return a-b;//升序
    //return b-a;
})
console.log(arr);
  • reverse() 倒序排序
var arr = [9,7,8,6,3,"AA","BB"];
arr.reverse();
console.log(arr);
  • splice() 删除,插入,替换
//2个参数,删除 返回被删除的元素,并且是一个新数组
var arr = [11,22,33,44,55];
var res = arr.splice(2,2);
console.log(res);
console.log(arr);

//3个参数,第二个参数是0,插入,
//3个参数,第二个参数是1或1以上,替换

//插入
var arr = [11,22,33,44,55];
var res = arr.splice(2,0,"11","22");
console.log(res);//空数组
console.log(arr);//将数值插入给了arr

//替换
var arr = [11,22,33,44,55];
var res = arr.splice(2,1,"19");
console.log(res);//把元素取出放在新的数组里面
console.log(arr);//将新的元素替换之前元素,

不会改变原数组的方法

  • slice() concat() join()
  • slice() 截取
  • 两个参数,参数1是开始位置,参数2是结束位置,包含参数1,但不包含参数2
  • 一个参数,参数是开始位置,从开始位置往后面截取,截取后面所有元素
var arr = [1,2,3,4,5,6,7,8];
var res = arr.slice(2,4);
console.log(res);
console.log(arr);
  • concat() 拼接数组,或数据,会返回一个新数组,不会改变原数组
var arr1 = [1,2,3];
var arr2 = [4,5,6];
var arr3 = arr1.concat(arr2);
var arr4 = arr3.concat(1,2,3,4);
console.log(arr1);
console.log(arr2);
console.log(arr3);
console.log(arr4);
  • join() 默认是用","隔开,返回一个字符串
var arr = [2023,12,12];
console.log(arr.join());
console.log(arr.join("+"));
console.log(arr.join("a"));

5.实现数组的拷贝(浅)

  • 使用的是concat 和 slice 方法
var arr = [11,22,33,44];
//方式一:concat()
var arr1 = arr.concat();
console.log(arr);
console.log(arr1);

//方式二:slice()
var arr2 = arr.slice(0);
console.log(arr);
console.log(arr2);

6.数组的遍历

  • 稀疏数组:数组中有些元素是空的,空的值默认是undefined
  • 例:var arr = ["张三",,,"李四",,"王五","赵六"]

for循环

  • 通过下标获取值
  • 如果遍历稀疏数组时,undefined会被遍历出来
var arr = ["张三",,,"李四",,"王五","赵六"];
for(var i=0;i<arr.length;i++){
    console.log(arr[i]);
}

for...in

  • 通过下标获取值
  • 语法:for(var key in arr){}
  • 如果遍历稀疏数组时,undefined不会被遍历出来
var arr = ["张三",,,"李四",,"王五","赵六"];
for(var key in arr){
    console.log(arr[key]);
}

for...of

  • 直接获取值
  • 语法:for(var value of 数组名){}
  • 如果遍历稀疏数组时,undefined会被遍历出来
  • value直接获取数组元素
var arr = ["张三",,,"李四",,"王五","赵六"];
for(var value in arr){
    console.log(value);
}

7.数组的去重

利用对象的key值

  • 原理:在对象中相同的key值会覆盖
var arr = [1,2,2,4,5,3,1,4,2]
var obj = {}
for(var i=0;i<arr.length;i++){
    obj[arr[i]] = ""   //使用对象key值相同会被覆盖的原理
}
var arr1 = []
for(var key in obj){
    //遍历对象obj,把对象中的key值转为number类型,在push()追加在arr1数组中    
    arr1.push(Number(key))  
}
console.log(arr1)  //(5) [1, 2, 3, 4, 5]

利用indexOf === -1

  • indexOf === -1 说明数组中没有这个元素
var arr = [1,2,2,4,5,3,1,4,2]
var arr1 = []
for(var i=0;i<arr.length;i++){
    if(arr1.indexOf(arr[i]) === -1){
        arr1.push(arr[i])
    }
}
console.log(arr)  // [1, 2, 2, 4, 5, 3, 1, 4, 2]
console.log(arr1)  // [1, 2, 4, 5, 3]

双重for循环

  • 会改变原数组
  • :删除之后,数组元素将会少一个,所以要j--
var arr = [1,2,2,2,1]			
for(var i=0;i<arr.length;i++){
    for(var j=i+1;j<arr.length;j++){
        if(arr[i] == arr[j]){ 
            arr.splice(j,1)
            //删除之后,数组元素将少一个
            //为了抵消再次累加后跳过的索引
            j--
        }
    }
}
console.log(arr)  //[1,2]

new set

  • ES6新出的,最简单的数组去重方法
var arr = [1,2,2,4,5,3,1,4,2]
var set1 = new Set(arr)
console.log(set1)   //Set(5) {1, 2, 4, 5, 3}
var arr1 = Array.from(set1)
console.log(arr1)   //(5) [1, 2, 4, 5, 3]