一、方法分类总结
1. 修改原数组的方法(破坏性方法)
- 添加/删除:
push(),pop(),unshift(),shift(),splice() - 重排:
reverse(),sort() - 填充/复制:
fill(),copyWithin()
2. 不修改原数组的方法(非破坏性方法)
- 创建新数组:
concat(),slice(),map(),filter(),flat(),flatMap() - 搜索查找:
indexOf(),lastIndexOf(),find(),findIndex(),findLast(),findLastIndex(),includes() - 检测判断:
every(),some() - 累积计算:
reduce(),reduceRight() - 字符串转换:
join(),toString(),toLocaleString() - ES2023 新方法:
toSorted(),toReversed(),toSpliced(),with()
3. 迭代器方法
- 遍历:
entries(),keys(),values()
4. 静态方法
- 数组创建:
Array.from(),Array.of()
二、使用场景建议
需要修改原数组时
1 | // 添加元素 |
需要保持原数组不变时
1 | // 创建新数组 |
搜索和检测时
1 | // 查找元素 |
三、修改原数组的方法
1. push()
作用: 向数组的末尾添加一个或多个元素
返回值: 修改后数组的新长度
是否修改原数组: ✅ 是
参数:
...elements(任意类型): 要添加到数组末尾的元素
1 | const arr = [1, 2]; |
2. pop()
作用: 移除并返回数组的最后一个元素
返回值: 被删除的元素,如果数组为空则返回 undefined
是否修改原数组: ✅ 是
参数: 无
1 | const arr = [1, 2, 3]; |
3. unshift()
作用: 向数组的开头添加一个或多个元素
返回值: 修改后数组的新长度
是否修改原数组: ✅ 是
参数:
...elements(任意类型): 要添加到数组开头的元素
1 | const arr = [3, 4]; |
4. shift()
作用: 移除并返回数组的第一个元素
返回值: 被删除的元素,如果数组为空则返回 undefined
是否修改原数组: ✅ 是
参数: 无
1 | const arr = [1, 2, 3]; |
5. splice()
作用: 在指定位置添加/删除/替换元素
返回值: 包含被删除元素的数组
是否修改原数组: ✅ 是
参数:
start(number): 开始修改的索引位置deleteCount(number): 要删除的元素个数...items(任意类型): 要添加的元素(可选)
1 | const arr = [1, 2, 3, 4, 5]; |
6. reverse()
作用: 反转数组中元素的顺序
返回值: 反转后的数组(原数组的引)
是否修改原数组: ✅ 是
参数: 无
1 | const arr = [1, 2, 3, 4]; |
7. sort()
作用: 对数组元素进行排序
返回值: 排序后的数组(原数组的引用)
是否修改原数组: ✅ 是
参数:
compareFunction(function, 可选): 定义排序顺序的函数
1 | const arr = [3, 1, 4, 1, 5]; |
8. fill()
作用: 用固定值填充数组中的元素
返回值: 修改后的数组(原数组的引用)
是否修改原数组: ✅ 是
参数:
value(任意类型): 填充的值start(number, 可选): 开始索引,默认 0end(number, 可选): 结束索引(不包含),默认数组长度
1 | const arr = [1, 2, 3, 4, 5]; |
9. copyWithin()
作用: 在数组内部复制元素序列到指定位置
返回值: 修改后的数组(原数组的引用)
是否修改原数组: ✅ 是
参数:
target(number): 复制到的目标索引位置start(number, 可选): 开始复制的源索引,默认 0end(number, 可选): 结束复制的源索引(不包含),默认数组长度
1 | const arr = [1, 2, 3, 4, 5]; |
四、不修改原数组的方法
10. concat()
作用: 合并两个或多个数组,创建新数组
返回值: 新的合并数组
是否修改原数组: ❌ 否
参数:
...values(任意类型): 要合并的数组或值
1 | const arr1 = [1, 2]; |
11. slice()
作用: 提取数组的指定部分作为新数组
返回值: 新的数组片段
是否修改原数组: ❌ 否
参数:
start(number, 可选): 开始索引,默认 0end(number, 可选): 结束索引(不包含),默认数组长度
1 | const arr = [1, 2, 3, 4, 5]; |
12. join()
作用: 将数组的所有元素连接成一个字符串
返回值: 连接后的字符串
是否修改原数组: ❌ 否
参数:
separator(string, 可选): 分隔符,默认逗号
1 | const arr = [1, 2, 3]; |
13. toString()
作用: 返回数组的字符串表示形式
返回值: 数组的字符串表示
是否修改原数组: ❌ 否
参数: 无
1 | const arr = [1, 2, 3]; |
14. toLocaleString()
作用: 返回数组的本地化字符串表示
返回值: 本地化格式的字符串
是否修改原数组: ❌ 否
参数:
locales(string/array, 可选): 语言代码options(object, 可选): 格式选项
1 | const arr = [1234.56, new Date()]; |
五、遍历和转换方法
15. forEach()
作用: 对数组的每个元素执行指定的函数
返回值: undefined
是否修改原数组: ❌ 否(但回调函数可以修改)
参数:
callback(function): 每个元素执行的函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [1, 2, 3]; |
16. map()
作用: 对每个元素执行回调函数,返回新数组
返回值: 新的映射数组
是否修改原数组: ❌ 否
参数:
callback(function): 每个元素执行的映射函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [1, 2, 3]; |
17. filter()
作用: 过滤数组,返回满足条件的元素组成的新数组
返回值: 新的过滤数组
是否修改原数组: ❌ 否
参数:
callback(function): 测试函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [1, 2, 3, 4, 5]; |
18. reduce()
作用: 对数组元素执行累积计算
返回值: 累积结果
是否修改原数组: ❌ 否
参数:
callback(function): 累积函数initialValue(任意类型, 可选): 初始累积值
1 | const arr = [1, 2, 3, 4]; |
19. reduceRight()
作用: 从右向左对数组元素执行累积计算
返回值: 从右向左的累积结果
是否修改原数组: ❌ 否
参数:
callback(function): 累积函数initialValue(任意类型, 可选): 初始累积值
1 | const arr = [1, 2, 3, 4]; |
六、检测方法
20. every()
作用: 检测数组的所有元素是否都满足指定条件
返回值: 布尔值(是否所有元素都满足条件)
是否修改原数组: ❌ 否
参数:
callback(function): 测试函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [2, 4, 6, 8]; |
21. some()
作用: 检测数组中是否至少有一个元素满足指定条件
返回值: 布尔值(是否至少一个元素满足条件)
是否修改原数组: ❌ 否
参数:
callback(function): 测试函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [1, 3, 5, 7, 8]; |
七、搜索方法
22. indexOf()
作用: 查找指定元素在数组中第一次出现的索引
返回值: 元素的第一个索引,未找到返回 -1
是否修改原数组: ❌ 否
参数:
searchElement(任意类型): 要查找的元素fromIndex(number, 可选): 开始查找的索引
1 | const arr = [1, 2, 3, 2, 1]; |
23. lastIndexOf()
作用: 查找指定元素在数组中最后一次出现的索引
返回值: 元素的最后一个索引,未找到返回 -1
是否修改原数组: ❌ 否
参数:
searchElement(任意类型): 要查找的元素fromIndex(number, 可选): 开始查找的索引
1 | const arr = [1, 2, 3, 2, 1]; |
24. find()
作用: 查找数组中第一个满足条件的元素
返回值: 第一个满足条件的元素,未找到返回 undefined
是否修改原数组: ❌ 否
参数:
callback(function): 测试函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [1, 2, 3, 4, 5]; |
25. findIndex()
作用: 查找数组中第一个满足条件的元素的索引
返回值: 第一个满足条件的元素索引,未找到返回 -1
是否修改原数组: ❌ 否
参数:
callback(function): 测试函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [1, 2, 3, 4, 5]; |
26. findLast() (ES2023)
作用: 查找数组中最后一个满足条件的元素
返回值: 最后一个满足条件的元素,未找到返回 undefined
是否修改原数组: ❌ 否
参数:
callback(function): 测试函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [1, 2, 3, 2, 1]; |
27. findLastIndex() (ES2023)
作用: 查找数组中最后一个满足条件的元素的索引
返回值: 最后一个满足条件的元素索引,未找到返回 -1
是否修改原数组: ❌ 否
参数:
callback(function): 测试函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [1, 2, 3, 2, 1]; |
28. includes()
作用: 判断数组是否包含指定的元素
返回值: 布尔值(是否包含元素)
是否修改原数组: ❌ 否
参数:
searchElement(任意类型): 要查找的元素fromIndex(number, 可选): 开始查找的索引
1 | const arr = [1, 2, 3, NaN]; |
八、 ES6+ 新增方法
29. flat()
作用: 将嵌套数组扁平化
返回值: 新的扁平化数组
是否修改原数组: ❌ 否
参数:
depth(number, 可选): 扁平化深度,默认 1
1 | const arr = [1, [2, [3, [4]]]]; |
30. flatMap()
作用: 先对每个元素执行映射函数,然后将结果扁平化一级
返回值: 新的映射并扁平化一级的数组
是否修改原数组: ❌ 否
参数:
callback(function): 映射函数thisArg(任意类型, 可选): 回调函数的 this 值
1 | const arr = [1, 2, 3]; |
31. Array.from()
作用: 从类数组对象或可迭代对象创建新数组
返回值: 新的数组实例
是否修改原数组: ❌ 不适用(静态方法)
参数:
arrayLike(类数组对象): 要转换的对象mapFn(function, 可选): 映射函数thisArg(任意类型, 可选): 映射函数的 this 值
1 | console.log(Array.from('hello')); // ['h', 'e', 'l', 'l', 'o'] |
32. Array.of()
作用: 创建具有可变数量参数的新数组
返回值: 新的数组实例
是否修改原数组: ❌ 不适用(静态方法)
参数:
...elements(任意类型): 数组元素
1 | console.log(Array.of(1, 2, 3)); // [1, 2, 3] |
33. toSorted() (ES2023)
作用: 返回排序后的新数组,不修改原数组
返回值: 新的排序数组
是否修改原数组: ❌ 否
参数:
compareFunction(function, 可选): 排序函数
1 | const arr = [3, 1, 4, 1, 5]; |
34. toReversed() (ES2023)
作用: 返回反转后的新数组,不修改原数组
返回值: 新的反转数组
是否修改原数组: ❌ 否
参数: 无
1 | const arr = [1, 2, 3, 4, 5]; |
35. toSpliced() (ES2023)
作用: 返回拼接后的新数组,不修改原数组
返回值: 新的拼接数组
是否修改原数组: ❌ 否
参数:
start(number): 开始位置deleteCount(number): 删除数量...items(任意类型): 要添加的元素
1 | const arr = [1, 2, 3, 4, 5]; |
36. with() (ES2023)
作用: 返回修改指定索引值的新数组,不修改原数组
返回值: 新的修改后的数组
是否修改原数组: ❌ 否
参数:
index(number): 要修改的索引value(任意类型): 新值
1 | const arr = [1, 2, 3, 4, 5]; |
九、迭代器方法
37. entries()
作用: 返回包含数组键值对的迭代器
返回值: 新的数组迭代器
是否修改原数组: ❌ 否
参数: 无
1 | const arr = ['a', 'b', 'c']; |
38. keys()
作用: 返回包含数组索引的迭代器
返回值: 新的数组索引迭代器
是否修改原数组: ❌ 否
参数: 无
1 | const arr = ['a', 'b', 'c']; |
39. values()
作用: 返回包含数组元素的迭代器
返回值: 新的数组值迭代器
是否修改原数组: ❌ 否
参数: 无
1 | const arr = ['a', 'b', 'c']; |