Skip to content

JavaScript 数组方法 详解

每个常用的 JavaScript 数组方法,按行为分组:是否改变原数组、返回什么、以及何时使用。一张面向日常方法的速查表。

数组方法分为两类。变更方法会修改调用它们的数组;非变更方法返回新数组,并保持原数组不变。尽可能优先使用非变更方法:它们能避免意外的副作用,且可以干净地链式调用。map、filter 和 reduce 是你每天都会用到的主力。map 转换每个元素,filter 保留你想要的元素,reduce 把整个数组折叠成一个值。

参考表格 · 40 条目
40 of 40 rows
变更类
是新长度在数组末尾添加一个或多个元素。
是元素 | undefined移除并返回最后一个元素。
是元素 | undefined移除并返回第一个元素。
是新长度在数组开头添加一个或多个元素。
是被删除元素组成的数组从某个索引开始插入、删除或替换元素。
是原数组(已排序)原地重排元素;不传比较函数时,元素会按字符串方式比较。
是原数组(已反转)原地翻转元素顺序。
是原数组用一个值覆盖一段区间内的所有位置。
是原数组把一段元素复制到同一数组内的另一个位置。
迭代 / 转换
否新数组把每个元素转换成新值。
否新数组只保留通过测试的元素。
否累加值把所有元素折叠为一个值。
否累加值从最后一个元素开始,把所有元素折叠为一个值。
否undefined对每个元素执行一次副作用。
否元素 | undefined获取第一个通过测试的元素。
否索引或 -1获取第一个通过测试的元素的索引。
否元素 | undefined获取最后一个通过测试的元素。
否索引或 -1获取最后一个通过测试的元素的索引。
否布尔值检查是否至少有一个元素通过测试。
否布尔值检查是否所有元素都通过测试。
否新数组按给定深度展平嵌套数组;传入 Infinity 可展平所有层级。
否[索引, 元素] 迭代器遍历索引和元素对。
否索引迭代器只遍历索引。
否元素迭代器只遍历元素值。
访问器 / 非变更
否新数组把数组的一部分复制到新数组。
否新数组把两个或多个数组合并为一个。
否布尔值检查数组中是否存在某个值。
否索引或 -1查找某个值第一次出现的索引。
否索引或 -1查找某个值最后一次出现的索引。
否字符串用分隔符把所有元素连接成一个字符串。
否元素 | undefined按索引读取元素,负索引从末尾开始计数。
新增方法
否新数组一次遍历中完成对每个元素的映射并把结果展平一层。
否新数组返回替换了某个索引处元素的副本。
否新数组(已排序)对副本排序,原数组保持不变。
否新数组(已反转)反转副本,原数组保持不变。
否新数组对副本执行 splice,原数组保持不变。
静态方法
否新数组从可迭代对象或类数组对象构建数组。
否新数组从一组参数构建数组。
否布尔值检查某个值是否是真正的数组。
否返回新数组的 Promise从异步可迭代对象构建数组。