<think>我们已知用户之前讨论了Vue3和Vue2的写法区别,现在用户突然询问数组的方法。根据提供的引用,我们需要详细解答数组的常用方法。
引用内容:
[1] 介绍了数组的常用方法,分为改变原数组的方法、不改变原数组的方法和最新的不可变方法。
[2] 重点介绍了splice方法,可以添加、删除和插入元素。
[3] 示例了push和pop方法。
因此,我们将按照以下结构回答:
1. 改变原数组的方法(突变方法)
2. 不改变原数组的方法(非突变方法)
3. 最新的不可变方法(如使用扩展运算符等)
注意:在回答中,我们将在适当位置添加引用标记[^1][^2][^3]。
同时,我们需要生成相关问题。
由于用户之前的问题是关于Vue的,而当前问题是关于JavaScript数组的,所以相关问题应围绕数组方法展开。
</think>以下是JavaScript数组常用方法的系统分类说明,结合引用内容进行详细解析:
### 一、改变原数组的方法(突变方法)
1. **`splice()`** - 添加/删除/替换元素
语法:`arr.splice(start, deleteCount, elem1, ..., elemN)`
```javascript
let arr = [1, 2, 3];
arr.splice(1, 1, 'a', 'b'); // 从索引1删除1个元素,添加'a','b'
console.log(arr); // [1, "a", "b", 3] [^2]
```
2. **`push()`** - 末尾添加元素
```javascript
let arr = [1];
arr.push(2, 3);
console.log(arr); // [1, 2, 3] [^3]
```
3. **`pop()`** - 删除末尾元素
```javascript
let arr = [1, 2, 3];
arr.pop();
console.log(arr); // [1, 2] [^3]
```
4. **`shift()`** - 删除首元素
```javascript
let arr = [1, 2, 3];
arr.shift();
console.log(arr); // [2, 3]
```
5. **`unshift()`** - 开头添加元素
```javascript
let arr = [2, 3];
arr.unshift(1);
console.log(arr); // [1, 2, 3]
```
6. **`sort()`** - 数组排序
```javascript
let arr = [3, 1, 2];
arr.sort((a, b) => a - b);
console.log(arr); // [1, 2, 3]
```
7. **`reverse()`** - 反转数组顺序
```javascript
let arr = [1, 2, 3];
arr.reverse();
console.log(arr); // [3, 2, 1]
```
### 二、不改变原数组的方法(非突变方法)
1. **`slice()`** - 截取子数组
```javascript
let arr = [1, 2, 3];
let subArr = arr.slice(1, 3);
console.log(subArr); // [2, 3] 原数组不变
```
2. **`concat()`** - 合并数组
```javascript
let arr1 = [1, 2];
let arr2 = arr1.concat([3, 4]);
console.log(arr2); // [1, 2, 3, 4]
```
3. **`filter()`** - 条件过滤
```javascript
let arr = [1, 2, 3, 4];
let filtered = arr.filter(x => x > 2);
console.log(filtered); // [3, 4]
```
4. **`map()`** - 元素映射
```javascript
let arr = [1, 2, 3];
let mapped = arr.map(x => x * 2);
console.log(mapped); // [2, 4, 6]
```
5. **`reduce()`** - 累积计算
```javascript
let arr = [1, 2, 3];
let sum = arr.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 6
```
### 三、不可变方法(现代ES6+推荐)
1. **扩展运算符**
```javascript
let arr = [1, 2, 3];
let newArr = [...arr, 4]; // [1, 2, 3, 4]
```
2. **`Array.from()`** - 类数组转数组
```javascript
let set = new Set([1, 2, 3]);
let arr = Array.from(set); // [1, 2, 3]
```
3. **`flat()`** - 数组扁平化
```javascript
let arr = [1, [2, [3]]];
console.log(arr.flat(2)); // [1, 2, 3]
```
> **关键区别提示**:
> 避免使用`delete arr[index]`,因为它会留下空位(如`[1, empty, 3]`)而不改变数组长度,应使用`splice()`实现元素删除[^2]。