在 JavaScript 中,数组是一个非常常用的数据结构,处理数组的各种方法可以帮助我们高效地进行数据的增删改查。数组的方法可大致分为两大类:改变原数组和不改变原数组。了解这些方法的功能和使用方式,对于提高编程效率非常重要。
本文将介绍常见的数组方法,并按照是否改变原数组进行分类。
一、改变原数组的方法
改变原数组的方法会直接修改数组本身。使用这些方法时要小心,避免不必要的数据更改。以下是常见的数组方法,分为不同的类别。
1. 添加元素
-
push()
向数组的末尾添加一个或多个元素,并返回新数组的长度。let arr = [1, 2, 3]; arr.push(4); // arr = [1, 2, 3, 4]
-
unshift()
向数组的开头添加一个或多个元素,并返回新数组的长度。let arr = [1, 2, 3]; arr.unshift(0); // arr = [0, 1, 2, 3]
2. 删除元素
-
pop()
删除数组的最后一个元素,并返回被删除的元素。let arr = [1, 2, 3]; arr.pop(); // arr = [1, 2], 返回值是 3
-
shift()
删除数组的第一个元素,并返回被删除的元素。let arr = [1, 2, 3]; arr.shift(); // arr = [2, 3], 返回值是 1
3. 修改数组顺序
-
reverse()
反转数组中元素的顺序。let arr = [1, 2, 3]; arr.reverse(); // arr = [3, 2, 1]
-
sort()
按照字母顺序或Unicode码点排序数组的元素。let arr = [3, 1, 2]; arr.sort(); // arr = [1, 2, 3]
4. 添加或删除任意位置的元素
- splice()
在指定位置删除一定数量的元素,并可以插入新元素。let arr = [1, 2, 3, 4]; arr.splice(2, 1, 5, 6); // arr = [1, 2, 5, 6, 4], 返回值是 [3]
5. 填充数组
- fill()
用指定的值填充整个数组或数组的指定部分。let arr = [1, 2, 3]; arr.fill(0, 1, 2); // arr = [1, 0, 3]
二、不改变原数组的方法
不改变原数组的方法会返回新的数组或值,而不会直接修改原数组本身。使用这些方法可以保证原数组不受影响,非常适合需要保留原数组不变的场景。
1. 连接数组
- concat()
用来合并两个或多个数组,返回新数组。let arr1 = [1, 2]; let arr2 = [3, 4]; let newArr = arr1.concat(arr2); // newArr = [1, 2, 3, 4]
2. 裁切数组
- slice()
返回数组的一部分,原数组不发生改变。let arr = [1, 2, 3, 4]; let newArr = arr.slice(1, 3); // newArr = [2, 3]
3. 数组转换为字符串
-
toString()
将数组转换为字符串,元素之间用逗号分隔。let arr = [1, 2, 3]; let str = arr.toString(); // str = "1,2,3"
-
join()
用指定的字符连接数组中的元素,默认分隔符是逗号。let arr = [1, 2, 3]; let str = arr.join('-'); // str = "1-2-3"
4. 遍历数组
-
forEach()
遍历数组,对每个元素执行给定的回调函数。let arr = [1, 2, 3]; arr.forEach(item => console.log(item)); // 输出 1, 2, 3
-
map()
遍历数组并返回一个新的数组,其中包含回调函数的返回值。let arr = [1, 2, 3]; let newArr = arr.map(item => item * 2); // newArr = [2, 4, 6]
-
filter()
遍历数组,返回满足条件的元素组成的新数组。let arr = [1, 2, 3, 4]; let newArr = arr.filter(item => item > 2); // newArr = [3, 4]
-
every()
判断数组中所有元素是否满足条件,返回布尔值。let arr = [1, 2, 3]; let result = arr.every(item => item > 0); // result = true
-
some()
判断数组中是否有元素满足条件,返回布尔值。let arr = [1, 2, 3]; let result = arr.some(item => item > 2); // result = true
5. 归并数组
-
reduce()
对数组进行归并操作,返回最终的计算结果。let arr = [1, 2, 3]; let result = arr.reduce((acc, item) => acc + item, 0); // result = 6
-
reduceRight()
从右到左进行归并操作,返回最终的计算结果。let arr = [1, 2, 3]; let result = arr.reduceRight((acc, item) => acc + item, 0); // result = 6
6. 查找元素
-
indexOf()
返回数组中某个元素第一次出现的索引,不存在则返回 -1。let arr = [1, 2, 3]; let index = arr.indexOf(2); // index = 1
-
lastIndexOf()
从数组的末尾开始查找,返回某个元素最后一次出现的索引,不存在则返回 -1。let arr = [1, 2, 3, 2]; let index = arr.lastIndexOf(2); // index = 3
-
includes()
判断数组是否包含某个指定的元素,返回布尔值。let arr = [1, 2, 3]; let result = arr.includes(2); // result = true
-
find()
返回数组中第一个满足条件的元素,不满足条件则返回undefined
。let arr = [1, 2, 3]; let result = arr.find(item => item > 2); // result = 3
-
findIndex()
返回数组中第一个满足条件的元素的索引,不满足条件则返回 -1。let arr = [1, 2, 3]; let index = arr.findIndex(item => item > 2); // index = 2
7. 数组去重和展平
-
flat()
将嵌套的数组“拉平”,返回一个新的数组。let arr = [1, [2, 3], [4, [5, 6]]]; let newArr = arr.flat(); // newArr = [1, 2, 3, 4, [5, 6]]
-
flatMap()
先使用map()
映射数组,再使用flat()
将结果“拉平”。let arr = [1, 2, 3]; let newArr = arr.flatMap(item => [item, item *