JavaScript 提供了许多用于操作数组的内置方法,以下是一些常用的数组方法及其功能:
1. 修改原数组的方法
这些方法会直接修改原数组。
| 方法名 | 描述 | 示例 |
|---|---|---|
push() | 在数组末尾添加一个或多个元素,返回新数组的长度。 | arr.push(4)→ 在 arr末尾添加 4 |
pop() | 移除并返回数组的最后一个元素。 | arr.pop()→ 移除并返回最后一个元素 |
unshift() | 在数组开头添加一个或多个元素,返回新数组的长度。 | arr.unshift(0)→ 在 arr开头添加 0 |
shift() | 移除并返回数组的第一个元素。 | arr.shift()→ 移除并返回第一个元素 |
splice() | 从指定位置删除或替换元素,返回被删除的元素。 | arr.splice(1, 2)→ 从索引 1 开始删除 2 个元素 |
reverse() | 反转数组的顺序。 | arr.reverse()→ 反转 arr |
sort() | 对数组元素进行排序(默认按字符串排序)。 | arr.sort()→ 按字母顺序排序 |
fill() | 用指定值填充数组的某个区间。 | arr.fill(0, 1, 3)→ 将索引 1 到 3 的元素填充为 0 |
2. 不修改原数组的方法
这些方法不会修改原数组,而是返回一个新数组或值。
| 方法名 | 描述 | 示例 |
|---|---|---|
slice() | 返回数组的某一部分(浅拷贝)。 | arr.slice(1, 3)→ 返回索引 1 到 3 的元素 |
concat() | 合并两个或多个数组,返回新数组。 | arr.concat([4, 5])→ 合并 arr和 [4, 5] |
join() | 将数组元素连接成一个字符串。 | arr.join('-')→ 将数组元素用 -连接 |
indexOf() | 返回指定元素的第一个索引,未找到返回 -1。 | arr.indexOf('apple')→ 返回 'apple'的索引 |
lastIndexOf() | 返回指定元素的最后一个索引,未找到返回 -1。 | arr.lastIndexOf('apple')→ 返回 'apple'的最后索引 |
includes() | 检查数组是否包含某个元素,返回布尔值。 | arr.includes('apple')→ 检查 arr是否包含 'apple' |
find() | 返回第一个满足条件的元素,未找到返回 undefined。 | arr.find(x => x > 2)→ 返回第一个大于 2 的元素 |
findIndex() | 返回第一个满足条件的元素的索引,未找到返回 -1。 | arr.findIndex(x => x > 2)→ 返回第一个大于 2 的元素的索引 |
filter() | 返回满足条件的所有元素组成的新数组。 | arr.filter(x => x > 2)→ 返回所有大于 2 的元素 |
map() | 对数组中的每个元素执行函数,返回结果组成的新数组。 | arr.map(x => x * 2)→ 返回每个元素乘以 2 后的数组 |
reduce() | 对数组元素从左到右执行累加器函数,返回最终结果。 | arr.reduce((acc, x) => acc + x, 0)→ 返回数组元素的总和 |
reduceRight() | 对数组元素从右到左执行累加器函数,返回最终结果。 | arr.reduceRight((acc, x) => acc + x, 0)→ 从右到左累加 |
every() | 检查数组中的所有元素是否都满足条件,返回布尔值。 | arr.every(x => x > 0)→ 检查是否所有元素都大于 0 |
some() | 检查数组中是否有至少一个元素满足条件,返回布尔值。 | arr.some(x => x > 0)→ 检查是否有元素大于 0 |
flat() | 将嵌套数组“拉平”成一维数组。 | arr.flat()→ 将多维数组转换为一维数组 |
flatMap() | 先对数组元素执行 map(),再对结果执行 flat()。 | arr.flatMap(x => [x, x * 2])→ 先映射,再拉平 |
3. 迭代方法
这些方法用于遍历数组。
| 方法名 | 描述 | 示例 |
|---|---|---|
forEach() | 对数组中的每个元素执行函数。 | arr.forEach(x => console.log(x))→ 打印每个元素 |
entries() | 返回一个包含键值对的迭代器。 | for (const [index, value] of arr.entries())→ 遍历索引和值 |
keys() | 返回一个包含数组索引的迭代器。 | for (const index of arr.keys())→ 遍历索引 |
values() | 返回一个包含数组值的迭代器。 | for (const value of arr.values())→ 遍历值 |
4. 其他方法
| 方法名 | 描述 | 示例 |
|---|---|---|
toString() | 将数组转换为字符串。 | arr.toString()→ 返回数组的字符串形式 |
toLocaleString() | 将数组转换为本地化字符串。 | arr.toLocaleString()→ 返回本地化字符串 |
Array.isArray() | 检查一个值是否为数组。 | Array.isArray(arr)→ 检查 arr是否为数组 |
Array.from() | 将类数组对象或可迭代对象转换为数组。 | Array.from('hello')→ 返回 ['h', 'e', 'l', 'l', 'o'] |
Array.of() | 创建一个包含任意数量元素的新数组。 | Array.of(1, 2, 3)→ 返回 [1, 2, 3] |
总结
- 修改原数组:
push()、pop()、unshift()、shift()、splice()、reverse()、sort()、fill()。 - 不修改原数组:
slice()、concat()、join()、indexOf()、lastIndexOf()、includes()、find()、findIndex()、filter()、map()、reduce()、reduceRight()、every()、some()、flat()、flatMap()。 - 迭代方法:
forEach()、entries()、keys()、values()。 - 其他方法:
toString()、toLocaleString()、Array.isArray()、Array.from()、Array.of()。
根据需求选择合适的方法可以更高效地操作数组!