一、JavaScript-数组
1.什么是数组?
数组就是专门用于存储一组数据的;
- 注意点:
和我们前面学习的Number / String / Boolean/ Null / undefined不同(基本数据类型);而我们今天学习的数组(Array)不是基本数据类型, 是引用数据类型(对象类型);
2.如何创建一个数组?
let 变量名称 = new Array(size);
数组注意点:
- 和其它编程语言不同, 如果数组对应的索引中没有存储数据, 默认存储的就是undefined;
// 其它编程语言中默认保存的是垃圾数据或者0;
- 和其它编程语言不同, JavaScript中访问了数组中不存在的索引不会报错, 会返回undefined;
// 其它编程语言一旦超出索引范围就会报错或者返回脏数据;
- 和其它编程语言不同, 当JavaScript中数组的存储空间不够时数组会自动扩容;
// 其它编程语言中数组的大小是固定的;
- 和其它编程语言不同,JavaScript的数组可以存储不同类型数据;
// 在其它编程语言中数组只能存储相同类型数据(要么全部都是字符串, 要么全部都是数值等);
- 和其它编程语言不同,JavaScript中数组分配的存储空间不一定是连续的;
// 其它语言数组分配的存储空间都是连续的, JavaScript数组是采用"哈希映射"方式分配存储空间;
// 什么是哈希映射? 好比字典可以通过偏旁部首找到对应汉字,我们可以通过索引找到对应空间;
// 在浏览器中各大浏览器也对数组分配存储空间进行了优化;
// 如果存储的都是相同类型的数据, 那么会尽量分配连续的存储空间;
// 如果存储的不是相同的数据类型, 那么就不会分配连续的存储空间;
. 创建数组的其它方式
1. 通过构造函数创建数组:
let 变量名称 = new Array(size); 创建一个指定大小数组
let 变量名称 = new Array(); 创建一个空数组
let 变量名称 = new Array(data1, data2, ...); 创建一个带数据的数组
2. 通过字面量创建数组:
let 变量名称 = []; 创建一个空数组
let 变量名称 = [data1, data2, ...]; 创建一个空数组
3.什么是数组的遍历
数组的遍历就是依次取出数组中存储的所有数据, 我们就称之为数组的遍历;
二、JavaScript-数组解构赋值
1.什么是数组的解构赋值?
解构赋值是ES6中新增的一种赋值方式;
例:
let ee = [1,3,5];
let [a,b,c]=ee; //a=1,b=2,c=3
2.数组解构赋值的注意点
2.1 在数组的解构赋值中, 等号左边的格式必须和等号右边的格式一模一样, 才能完全解构;
let [a, b, [c, d]] = [1, 3, [2, 4]];
2.2 在数组的解构赋值中, 左边的个数可以和右边的个数不一样;
2.3 在数组的解构赋值中, 右边的个数可以和左边的个数不一样;
2.4 在数组的解构赋值中,如果右边的个数和左边的个数不一样, 那么我们可以给左边指定默认值;
let [a, b = 666, c = 888] = [1];
2.5 在数组的解构赋值中, 如果左边的个数和右边的个数不一样, 那么如果设置默认值会被覆盖;
2.6 在数组的解构赋值中, 还可以使用ES6中新增的扩展运算符来打包剩余的数据;
let [a, ...b]= [1, 3, 5]; //a=1 , b=3, 5
2.7 在数组的解构赋值中, 如果使用了扩展运算符, 那么扩展运算符只能写在最后;
三、JavaScript-数组增删改查
let arr = ["a","b", "c"];
需求: 获取数组中索引为1的那个数据 (查);
console.log(arr[1]);
需求: 将索引为1的数据修改为m (改);
arr[1] = "m";
需求: 将索引为1的数据修改为d, 索引为2的修改为e (改);
参数1: 从什么位置开始
参数2: 需要替换多少个元素
参数3开始: 新的内容
arr.splice(1, 2, "d", "e");
需求: 要求在数组最后添加一条数据 (增);
push方法可以在数组的最后新增一条数据, 并且会将新增内容之后数组当前的长度返回给我们;
let res = arr.push("d");
需求: 要求在数组最后添加两条数据 (增);
数组的push方法可以接收1个或多个参数;
arr.push("d", "e");
需求: 要求在数组最前面添加一条数据 (增);
unshift 方法和 push 方法一样, 会将新增内容之后当前数组的长度返回给我们;
let res = arr.unshift("m");
unshift方法和push方法一样, 可以接收1个或多个参数;
arr.unshift("m", "w");
需求: 要求删除数组最后一条数据 (删);
数组的pop方法可以删除数组中的最后一条数据, 并且将删除的数据返回给我们;
let res = arr.pop();
需求: 要求删除数组最前面一条数据 (删) ;
数组的shift方法可以删除数组中的最前面一条数据, 并且将删除的数据返回给我们;
let res = arr.shift();
需求: 要求删除数组中索引为1的数据 (删);
以下代码的含义: 从索引为1的元素开始删除1条数据
参数1: 从什么位置开始
参数2: 需要删除多少个元素
arr.splice(1, 1);
需求: 要求删除数组中除了第0条以外的所有数据 (删)
arr.splice(1, 2);
四、数组常用方法
给定数组:
let arr = [1, 2, 3, 4, 5];
1.如何清空数组
// arr = [];
// arr.length = 0;
// arr.splice(0, arr.length)
2.如何将数组转换为字符串
let str = arr.toString();
3.如何将数组转换成指定格式字符串
join方法默认情况下如果没有传递参数, 就是调用toString();
join方法如果传递了参数, 就会将传递的参数作为元素和元素的连接符号;
let str = arr.join("+");
4.如何将两个数组拼接为一个数组
let arr1 = [1, 3, 5];
let arr2 = [2, 4, 6];
注意点: 数组不能够使用加号进行拼接, 如果使用加号进行拼接会先转换成字符串再拼接;
let res = arr1.concat(arr2);
注意点: 扩展运算符在解构赋值中(等号的左边)表示将剩余的数据打包成一个新的数组; 扩展运算符在等号右边, 那么表示将数组中所有的数据解开, 放到所在的位置;
let res = [...arr1, ...arr2]; // let res = [1, 3, 5, 2, 4, 6]; //企业推荐用这种;
注意点: 不会修改原有的数组, 会生成一个新的数组返回给我们;
5.如何对数组中的内容进行反转
let res = arr.reverse();
- 注意点: 会修改原有的数组;
6.如何截取数组中指定范围内容
slice方法是包头不包尾(包含起始位置, 不包含结束的位置);
xxx.slice(start,end); 其中end可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
let res = arr.slice(1, 3)
7.如何查找元素在数组中的位置
indexOf方法如果找到了指定的元素, 就会返回元素对应的位置;
indexOf方法如果没有找到指定的元素, 就会返回-1;
- 注意点: indexOf方法默认是从左至右的查找, 一旦找到就会立即停止查找;
let res = arr.indexOf(3);
参数1: 需要查找的元素
参数2: 从什么位置开始查找
let res = arr.indexOf(3, 4);
- 注意点: lastIndexOf方法默认是从右至左的查找, 一旦找到就会立即停止查找;
8.如何判断数组中是否包含某个元素
let arr = [1, 2, 3, 4, 5];
我们可以通过 indexOf 和 lastIndexOf 的结果, 判断是否是-1即可;
let res = arr.indexOf(8);
let res = arr.lastIndexOf(8);
常用方法:
let res = arr.includes(4);
8.将输入数据转化成数组形式:
let str = prompt("请输入三个整数, 用逗号隔开");
console.log(str); // 1,3,5
字符串的split方法可以根据传入的参数切割字符串, 转换成一个数组之后返回给我们;
let arr = str.split(","); //注意:这里的逗号格式要正确写
-End