Skip to content

数组常用操作

修改原数组的方法

push() / pop()

在数组末尾添加/删除元素

push返回新长度,pop返回被删除的元素

unshift() / shift()

在数组开头添加/删除元素

unshift返回新长度,shift返回被删除的元素

splice()

从指定位置删除、替换或添加元素

参数:splice(start, deleteCount, item1, item2, ...)

js
let arr = [1, 2, 3, 4];
arr.splice(1, 2, 'a', 'b'); // 从索引1开始,删除2个元素,添加'a','b'
// arr → [1, 'a', 'b', 4]

reverse()

作用:反转数组顺序。

js
[1, 2, 3].reverse(); // [3, 2, 1]

sort()

fill()

作用:填充数组(ES6+)

js
new Array(3).fill(0); // [0, 0, 0]

不修改原数组的方法

concat()

作用:合并数组,返回新数组。

js
[1, 2].concat([3, 4]); // [1, 2, 3, 4]

slice()

作用:截取子数组(浅拷贝)。

js
[1, 2, 3, 4].slice(1, 3); // [2, 3]

join()

作用:将数组转为字符串。

js
[1, 2, 3].join('-'); // "1-2-3"

搜索与判断方法

indexOf() / lastIndexOf()

作用:查找元素索引(严格相等 ===)。

js
[1, 2, 3].indexOf(2); // 1

includes() ES6+

作用:判断是否包含某元素。

js
[1, 2, 3].includes(2); // true

find() / findIndex() ES6+

作用:根据回调函数查找元素或索引。

js
const users = [{id:1}, {id:2}];
users.find(user => user.id === 2); // {id: 2}

迭代方法

forEach()

作用:遍历数组,无返回值。

js
[1, 2, 3].forEach(num => console.log(num));

map()

作用:映射新数组。

js
[1, 2, 3].map(num => num * 2); // [2, 4, 6]

filter()

作用:过滤符合条件的元素。

js
[1, 2, 3].filter(num => num > 1); // [2, 3]

reduce() / reduceRight()

作用:累计计算。

js
[1, 2, 3].reduce((sum, num) => sum + num, 0); // 6

some() / every()

作用:判断是否至少有一个/全部元素满足条件。

js
[1, 2, 3].some(num => num > 2); // true
[1, 2, 3].every(num => num > 0); // true

转换与生成方法

flat() / flatMap()(ES6+)

作用:扁平化数组。

js
[1, [2, [3]]].flat(2); // [1, 2, 3]
[1, 2].flatMap(num => [num, num * 2]); // [1, 2, 2, 4]

Array.from()

作用:将类数组对象转为数组。

js
Array.from('123'); // ['1', '2', '3']

其他方法

isArray()

作用:判断是否为数组。

js
Array.isArray([]); // true

copyWithin()

作用:复制数组的一部分到同一数组的另一位置。

js
[1, 2, 3, 4].copyWithin(0, 2); // [3, 4, 3, 4]

方法总结

alt text

常用操作

求和

js
const arr = [1, 2, 3, 4, 5];

// 方法1: reduce
const sum = arr.reduce((acc, num) => acc + num, 0);

// 方法2: for循环
let sum = 0;
for (const num of arr) sum += num;

console.log(sum); // 15

最大值/最小值

js
const arr = [1, 2, 3, 4, 5];

// 方法1: Math.max + 展开运算符
const max = Math.max(...arr);
const min = Math.min(...arr);

// 方法2: reduce(适合大数组,避免展开运算符的栈溢出)
const max = arr.reduce((a, b) => Math.max(a, b), -Infinity);
const min = arr.reduce((a, b) => Math.min(a, b), -Infinity);

console.log(max); // 5
console.log(min); // 1

去重操作

js
const arr = [1, 2, 2, 3, 3, 3];
const unique = [...new Set(arr)]; // [1, 2, 3]

过滤

js
const arr = [1, 2, 3, 4, 5];
const evenNumbers = arr.filter(num => num % 2 === 0); // [2, 4]

映射

js
const arr = [1, 2, 3];
const doubled = arr.map(num => num * 2); // [2, 4, 6]

排序

js
const arr = [3, 1, 4, 2];
// 升序
arr.sort((a, b) => a - b); // [1, 2, 3, 4]
// 降序
arr.sort((a, b) => b - a); // [4, 3, 2, 1]

检查元素是否存在

js
const arr = [1, 2, 3];
arr.includes(2); // true
arr.indexOf(3) !== -1; // true

合并数组

js
const arr1 = [1, 2], arr2 = [3, 4];
const merged = [...arr1, ...arr2]; // [1, 2, 3, 4]

扁平化数组

js
const arr = [1, [2, [3]]];
const flat = arr.flat(2); // [1, 2, 3] (参数为展开深度)

计算平均值

js
const avg = arr.reduce((acc, num) => acc + num, 0) / arr.length;