概述

JavaScript 数组是开发中最常用的数据结构之一。本文将为你提供一份精炼的数组方法速查指南,包含最常用一些核心方法,方便快速查阅和使用。

本篇主要方便进行快速查阅,方法不进行过多讲解,如想看更详细的指南看我的下一篇文章​​——JavaScript 数组方法全指南(详细版)

一、修改原数组的方法(会改变原数组)​

方法

作用

示例

返回值

push()

在数组​​末尾​​添加一个或多个元素

arr.push(4, 5)→ [1,2,3,4,5]

新数组长度

pop()

删除数组​​最后一个​​元素

arr.pop()→ [1,2]

被删除的元素

unshift()

在数组​​开头​​添加一个或多个元素

arr.unshift(0)→ [0,1,2,3]

新数组长度

shift()

删除数组​​第一个​​元素

arr.shift()→ [2,3]

被删除的元素

splice()

删除/替换/插入元素(万能方法)

arr.splice(1,1,'a')→ [1,'a',3]

被删除的元素数组

sort()

对数组排序(默认按 Unicode 排序)

arr.sort((a,b) => a-b)

排序后的数组

reverse()

反转数组顺序

arr.reverse()→ [3,2,1]

反转后的数组

fill()

填充数组为固定值

arr.fill(0)→ [0,0,0]

修改后的数组

二、不修改原数组的方法(返回新数组或值)

方法

作用

示例

返回值

concat()

合并多个数组

arr.concat([4,5])→ [1,2,3,4,5]

新数组

slice()

截取数组片段

arr.slice(1,3)→ [2,3]

新数组

join()

将数组转为字符串(指定分隔符)

arr.join('-')→ "1-2-3"

字符串

indexOf()

查找元素首次出现的索引(严格相等)

arr.indexOf(2)→ 1

索引/-1

lastIndexOf()

查找元素最后一次出现的索引

arr.lastIndexOf(2)→ 1

索引/-1

includes()

判断数组是否包含某元素(ES6)

arr.includes(2)→ true

Boolean

find()

查找第一个符合条件的元素(ES6)

arr.find(x => x > 1)→ 2

元素/undefined

findIndex()

查找第一个符合条件的元素索引(ES6)

arr.findIndex(x => x > 1)→ 1

索引/-1

flat()

扁平化嵌套数组(ES2019)

[1,[2]].flat()→ [1,2]

新数组

flatMap()

先映射再扁平化(ES2019)

arr.flatMap(x => [x*2])→ [2,4,6]

新数组

三、遍历数组的方法​

方法

作用

示例

返回值

forEach()

遍历数组(无返回值)

arr.forEach(x => console.log(x))

undefined

map()

映射新数组(返回处理后的值)

arr.map(x => x*2)→ [2,4,6]

新数组

filter()

过滤符合条件的元素

arr.filter(x => x > 1)→ [2,3]

新数组

reduce()

累积计算(从左到右)

arr.reduce((sum, x) => sum + x, 0)→ 6

累积值

reduceRight()

累积计算(从右到左)

arr.reduceRight((sum, x) => sum + x, 0)→ 6

累积值

some()

判断是否有元素符合条件(任一)

arr.some(x => x > 2)→ true

Boolean

every()

判断是否所有元素符合条件(全部)

arr.every(x => x > 0)→ true

Boolean

keys()

返回数组索引的迭代器(ES6)

[...arr.keys()]→ [0,1,2]

迭代器

values()

返回数组元素的迭代器(ES6)

[...arr.values()]→ [1,2,3]

迭代器

entries()

返回索引-值对的迭代器(ES6)

[...arr.entries()]→ [[0,1],[1,2],[2,3]]

迭代器

四、ES6+ 新增实用方法​

方法

作用

示例

Array.from()

将类数组/可迭代对象转为数组

Array.from('abc')→ ['a','b','c']

Array.of()

创建包含任意数量元素的新数组

Array.of(1,2,3)→ [1,2,3]

copyWithin()

复制数组内元素到指定位置(ES6)

[1,2,3,4].copyWithin(0,2)→ [3,4,3,4]

at()

支持负索引访问元素(ES2022)

arr.at(-1)→ 3

五、注意事项​

  1. ​修改原数组的方法​​:

    pushpopunshiftshiftsplicesortreversefill

    (使用前需考虑是否需要备份原数组)。

  2. ​性能优化​​:

    • 大数据量时,for循环比 forEach/map更快。

    • reduce适合复杂累积计算,但可读性较差。

  3. ​链式调用​​:

    非破坏性方法(如 mapfilter)可链式调用:

    arr.map(x => x*2).filter(x => x > 3); // [4,6]
  4. ​稀疏数组​​:

    方法如 mapfilter会跳过空位(empty),而 forEach不会。

六、经典使用场景​

// 1. 去重
const uniqueArr = [...new Set(arr)];

// 2. 求和
const sum = arr.reduce((a, b) => a + b, 0);

// 3. 对象数组按属性分组
const groupBy = (arr, key) => 
  arr.reduce((acc, obj) => {
    const group = obj[key];
    acc[group] = acc[group] || [];
    acc[group].push(obj);
    return acc;
  }, {});

// 4. 二维数组转对象
const pairs = [['a',1], ['b',2]];
const obj = Object.fromEntries(pairs); // {a:1, b:2}

总结​

  • ​增删元素​​:push/pop/shift/unshift/splice

  • ​查找/判断​​:indexOf/includes/find/findIndex/some/every

  • ​遍历/转换​​:forEach/map/filter/reduce

  • ​ES6+ 利器​​:flat/flatMap/Array.from/at

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐