注:JS文章流程为:数据类型>>运算>>语法,语句>>对象>>数组>>函数>>类
什么是数组:数组是一种非常常用的数据结构,用于存储一组有序的值。这些值可以是数字、字符串、对象,甚至是其他数组。数组中的每个值都有一个索引(从 0 开始),可以通过索引来访问和操作数组中的元素。
(类似于我们学过的数学里的集合,但只是表现上类似而已)
1. 创建数组
方法 :数组字面量
这是最常用的方式,直接用方括号 []
包裹一组值。
let fruits = ["苹果", "香蕉", "橙子"];let numbers = [1, 2, 3, 4, 5];let mixed = [1, "hello", true, { name: "张三" }, [1, 2, 3]];
2. 访问数组元素
数组中的每个元素都有一个索引,从 0 开始。可以通过索引来访问和修改数组中的元素。
let fruits = ["苹果", "香蕉", "橙子"];// 访问元素console.log(fruits[0]); // 输出 "苹果"console.log(fruits[1]); // 输出 "香蕉"// 修改元素fruits[1] = "草莓";console.log(fruits); // 输出 ["苹果", "草莓", "橙子"]
3. 数组的常用方法
添加和删除元素
push()
:向数组末尾添加一个或多个元素,并返回新数组的长度。
fruits.push("葡萄");console.log(fruits); // 输出 ["苹果", "草莓", "橙子", "葡萄"]
pop()
:从数组末尾移除一个元素,并返回被移除的元素。
let removedItem = fruits.pop();console.log(removedItem); // 输出 "葡萄"console.log(fruits); // 输出 ["苹果", "草莓", "橙子"]
shift()
:从数组开头移除一个元素,并返回被移除的元素。
let firstItem = fruits.shift();console.log(firstItem); // 输出 "苹果"console.log(fruits); // 输出 ["草莓", "橙子"]
unshift()
:向数组开头添加一个或多个元素,并返回新数组的长度。
fruits.unshift("樱桃");console.log(fruits); // 输出 ["樱桃", "草莓", "橙子"]
查找元素
indexOf()
:查找某个值在数组中的索引,如果找不到返回 -1
。
let index = fruits.indexOf("橙子");console.log(index); // 输出 2
(因为计数的时候第一个数字记为0,也就是说你觉的苹果应该是1但他的序号实际为0)
includes()
:检查数组是否包含某个值,返回布尔值。
console.log(fruits.includes("草莓")); // 输出 trueconsole.log(fruits.includes("西瓜")); // 输出 false
遍历数组
for
循环
for (let i = 0; i < fruits.length; i++) {console.log(fruits[i]);}
数组的拷贝和拼接
slice()
:返回数组的一个浅拷贝,不会修改原数组。
let newFruits = fruits.slice(1, 3); // 从索引 1 到 3(不包括 3)console.log(newFruits); // 输出 ["草莓", "橙子"]
concat()
:将多个数组拼接成一个新数组,不会修改原数组。
let moreFruits = ["西瓜", "芒果"];let allFruits = fruits.concat(moreFruits);console.log(allFruits); // 输出 ["樱桃", "草莓", "橙子", "西瓜", "芒果"]
数组的排序
sort()
:对数组进行排序,会修改原数组。
let numbers = [3, 1, 4, 1, 5, 9];numbers.sort();console.log(numbers); // 输出 [1, 1, 3, 4, 5, 9]
如果需要按照数值大小排序,需要提供一个比较函数:
numbers.sort(function(a, b) {return a - b; // 升序});console.log(numbers); // 输出 [1, 1, 3, 4, 5, 9]
数组的过滤和映射
filter()
:创建一个新数组,包含通过测试的所有元素,不会修改原数组。
let evenNumbers = numbers.filter(function(num) {return num % 2 === 0;});console.log(evenNumbers); // 输出 [4]
map()
:创建一个新数组,其元素是调用一次提供的函数后的返回值,不会修改原数组。
let squaredNumbers = numbers.map(function(num) {return num * num;});console.log(squaredNumbers); // 输出 [1, 1, 9, 16, 25, 81]
由于没有足够的实际生活应用,所以大家可能会觉得很莫名其妙,给大家列举几个实例可能会方便了解一些
示例:管理学生名单
假设我们需要管理一个班级的学生名单,可以使用数组来实现。
let students = ["张三", "李四", "王五"];// 添加学生students.push("赵六");console.log("添加学生后:", students);// 删除学生students.shift(); // 删除第一个学生console.log("删除学生后:", students);// 查找学生let index = students.indexOf("王五");if (index !== -1) {console.log("找到学生:", students[index]);} else {console.log("学生未找到");}// 遍历学生名单students.forEach(function(student) {console.log("学生:", student);});
通过这样的方式可能会方便大家理解,由于是完全基础性的内容,切忌好高骛远