改变原数组的方法:
push() - 将一个或多个元素添加到数组的末尾,并返回新数组的长度。
pop() - 从数组中移除最后一个元素,并返回该元素。
shift() - 从数组中移除第一个元素,并返回该元素。
unshift() - 将一个或多个元素添加到数组的开头,并返回新数组的长度。
splice() - 在指定的索引位置添加或移除元素,并返回被移除的元素。
reverse() - 反转数组中元素的顺序。
sort() - 对数组元素进行排序。
不改变原数组的方法:
concat() - 将两个或多个数组合并为一个新数组。
slice() - 返回数组的一个子集作为新数组。
join() - 将数组中所有元素连接成一个字符串。
indexOf() - 返回指定值在数组中的第一个匹配项的索引。
lastIndexOf() - 返回指定值在数组中的最后一个匹配项的索引。
includes() - 返回一个布尔值,指示数组是否包含指定的值。
filter() - 使用指定函数测试所有元素,并创建一个包含所有通过测试的元素的新数组。
map() - 对数组中的每个元素调用指定函数,并返回一个新数组。
reduce() - 对数组中的每个元素执行一个指定的函数,并将其结果汇总为单个值。
需要注意的是,对数组进行浅拷贝和深拷贝也是很重要的概念。浅拷贝会创建一个新的数组,但与原始数组共享相同的引用。而深拷贝则会创建一个完全新的数组,对新数组的修改不会影响原始数组。
常用疑难方法解析
1. sort
修改原数组
,对数组元素进行排序。sort
方法默认将数组元素视为字符串并按照 Unicode
顺序进行排序。
注意:
sort
方法采用的排序算法可以根据不同的 JavaScript引擎而有所不同。一般来说,常见的排序算法包括快速排序(quicksort)、归并排序(mergesort)等。具体到不同的JavaScript 引擎,比如 Chrome 的V8 引擎
在某些版本中使用的是快速排序(quicksort)
,而在某些版本中可能会使用 TimSort 等算法。Mozilla 的Firefox
使用的是归并排序(mergesort)
。
array.sort(function compareFunction(a, b) {
// 返回值 < 0: 表示 a 在 b 前面
// 返回值 = 0: 表示 a 和 b 位置不变
// 返回值 > 0: 表示 a 在 b 后面
});
const numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b); // 升序排序
numbers.sort((a, b) => b - a); // 降序排序
compareFunction:可选参数,用于指定排序顺序的比较函数,其中入参a, b分别代码数组中的两个元素。如果不提供比较函数,元素将按照 Unicode 顺序进行排序
2. reduce
对数组中的每个元素执行一个指定的函数
,并将其结果汇总为单个值
。
应用:实现各种累积操作,如求和、计数、查找最大/最小值、累加、累乘、字符串拼接等。
array.reduce(function(sum, v, index, array), initialValue);
// 示例
const total = [1,2,3,4,5].reduce((sum, v) => {
sum += v;
return sum;
}, 0); // 15
注: 每一位参数都是可选
sum:累积器,存储回调函数的返回值,初始值为 initialValue。
v:当前处理的数组元素。
index:当前处理的数组元素的索引。
array:调用 reduce 方法的数组。
initialValue:可选参数,作为第一次调用回调函数时的初始值。
3. filter
根据特定条件快速筛选出符合要求的数组元素,实现数据过滤和筛选的功能。
应用:数据筛选、过滤
array.filter(function(element, index, array) {
// 返回 true 表示保留该元素,返回 false 表示过滤掉该元素
}, thisArg);
// 示例
const newArray = [1,2,3,4,5].filter((v) => {
return v > 2
}); // [3, 4, 5]
element:当前处理的数组元素。
index:当前处理的数组元素的索引。
array:调用 filter 方法的数组。
thisArg:可选参数,执行回调函数时使用的 this 值。
4. map
数组中的每个元素执行一个指定的函数,并返回一个新的数组,新数组的元素是原始数组经过函数处理后的结果。
应用:对数组中的每个元素进行处理,生成一个新的数组,常用于数据转换、映射和提取等操作。
array.map(function(element, index, array) {
// 返回经过处理后的新元素
}, thisArg);
// 示例:将数组中的每个元素乘以2并返回新数组
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map(num => num * 2);
console.log(doubledNumbers); // 输出: [2, 4, 6, 8, 10]
element:当前处理的数组元素。
index:当前处理的数组元素的索引。
array:调用 map 方法的数组。
thisArg:可选参数,执行回调函数时使用的 this 值。