JavaScript 中的 Array(数组)对象是一种特殊的对象,用于在单个变量中存储多个值。数组中的元素按顺序排列,可以通过索引(下标)来访问它们。数组是 JavaScript 中最常用的数据结构之一,提供了丰富的方法来处理集合数据。以下是对 JavaScript Array 对象的功能、用法和运用的详细解释:
一、数组的基本概念
- 定义:数组是一种有序的集合,用于存储多个值。每个值称为数组的一个元素。
- 索引:数组中的每个元素都有一个唯一的索引(下标),用于标识元素在数组中的位置。索引从 0 开始,依次递增。
- 异质性:JavaScript 的数组是弱类型的,数组中可以包含不同类型的元素,如数字、字符串、对象等。
二、数组的创建
-
使用 Array 构造函数:
let arr1 = new Array(); // 创建一个空数组 let arr2 = new Array(3); // 创建一个长度为 3 的空数组,元素均为 undefined let arr3 = new Array(1, 2, 3); // 创建一个包含 1, 2, 3 的数组
-
使用字面量:
let arr4 = []; // 创建一个空数组 let arr5 = [1, 2, 3]; // 创建一个包含 1, 2, 3 的数组
-
多维数组:数组中的元素也可以是数组,构成多维数组。
let matrix = [[1, 2, 3],[4, 5, 6],[7, 8, 9] ]; // 创建一个 3x3 的二维数组
三、数组的访问与操作
-
访问数组元素:通过数组的索引来访问元素。
let arr = [1, 2, 3, 4, 5]; console.log(arr[0]); // 输出: 1 console.log(arr[2]); // 输出: 3
-
设置数组元素:通过索引给数组元素赋值。
arr[1] = 10; console.log(arr); // 输出: [1, 10, 3, 4, 5]
-
数组的长度:通过
length
属性获取或设置数组的长度。console.log(arr.length); // 输出: 5 arr.length = 3; console.log(arr); // 输出: [1, 10, 3]
四、数组的常用方法
1. 添加元素
-
push()
:在数组末尾添加一个或多个元素,并返回新的数组长度。let arr = [1, 2, 3]; arr.push(4, 5); console.log(arr); // 输出: [1, 2, 3, 4, 5]
-
unshift()
:在数组开头添加一个或多个元素,并返回新的数组长度。let arr = [1, 2, 3]; arr.unshift(0, -1); console.log(arr); // 输出: [-1, 0, 1, 2, 3]
-
splice()
:在数组中添加或删除元素,并返回被删除的元素组成的数组。let arr = [1, 2, 3, 4, 5]; arr.splice(2, 0, 'a', 'b'); // 在索引 2 处插入 'a' 和 'b' console.log(arr); // 输出: [1, 2, 'a', 'b', 3, 4, 5]
2. 删除元素
-
pop()
:删除数组的最后一个元素,并返回被删除的元素。let arr = [1, 2, 3, 4, 5]; let removedElement = arr.pop(); console.log(removedElement); // 输出: 5 console.log(arr); // 输出: [1, 2, 3, 4]
-
shift()
:删除数组的第一个元素,并返回被删除的元素。let arr = [1, 2, 3, 4, 5]; let removedElement = arr.shift(); console.log(removedElement); // 输出: 1 console.log(arr); // 输出: [2, 3, 4, 5]
-
splice()
:通过指定索引和删除数量来删除数组中的元素。let arr = [1, 2, 3, 4, 5]; arr.splice(1, 2); // 从索引 1 开始删除 2 个元素 console.log(arr); // 输出: [1, 4, 5]
3. 查找元素
-
indexOf()
:返回数组中某个元素的第一个索引,如果不存在则返回 -1。let arr = [1, 2, 3, 4, 2]; console.log(arr.indexOf(2)); // 输出: 1 console.log(arr.indexOf(5)); // 输出: -1
-
includes()
:判断数组中是否包含某个元素,返回布尔值。let arr = [1, 2, 3, 4, 5]; console.log(arr.includes(3)); // 输出: true console.log(arr.includes(6)); // 输出: false
-
find()
:返回数组中满足条件的第一个元素的值。let arr = [1, 2, 3, 4, 5]; console.log(arr.find(element => element > 3)); // 输出: 4
-
findIndex()
:返回数组中满足条件的第一个元素的索引。let arr = [1, 2, 3, 4, 5]; console.log(arr.findIndex(element => element > 3)); // 输出: 3
4. 遍历数组
-
for
循环:使用for
循环遍历数组元素。let arr = [1, 2, 3, 4, 5]; for (let i = 0; i < arr.length; i++) {console.log(arr[i]); }
-
for...of
循环:ES6 新增的语法,用于遍历可迭代对象(如数组、字符串、Map、Set 等)。let arr = [1, 2, 3, 4, 5]; for (let element of arr) {console.log(element); }
-
forEach()
:对数组的每个元素执行一次提供的函数。let arr = [1, 2, 3, 4, 5]; arr.forEach(element => {console.log(element); });
-
map()
:创建一个新数组,其结果是调用提供的函数处理每个元素后的结果。let arr = [1, 2, 3, 4, 5]; let newArr = arr.map(element => element * 2); console.log(newArr); // 输出: [2, 4, 6, 8, 10]
-
filter()
:创建一个新数组,包含通过测试的所有元素。let arr = [1, 2, 3, 4, 5]; let evenNumbers = arr.filter(element => element % 2 === 0); console.log(evenNumbers); // 输出: [2, 4]
-
reduce()
:对数组中的每个元素执行一个由提供的函数实现的累积器,将其结果汇总为单个返回值。let arr = [1, 2, 3, 4, 5]; let sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0); console.log(sum); // 输出: 15
5. 数组转换
-
concat()
:连接两个或多个数组,并返回一个新数组。let