### JavaScript 数组方法及其用法
JavaScript 提供了许多内置的方法来操作数组,这些方法可以用于修改、查询以及转换数据结构。以下是常见的数组方法及其功能描述:
#### 1. 添加/移除元素
- **`push()`**: 向数组末尾添加一个或多个元素,并返回新长度。
```javascript
let arr = [1, 2];
arr.push(3);
console.log(arr); // 输出: [1, 2, 3]
```
- **`pop()`**: 移除数组最后一个元素并返回该元素。
```javascript
let arr = [1, 2, 3];
let removedElement = arr.pop();
console.log(removedElement); // 输出: 3
console.log(arr); // 输出: [1, 2]
```
- **`unshift()`**: 在数组开头添加一个或多个元素,并返回新长度。
```javascript
let arr = [2, 3];
arr.unshift(1);
console.log(arr); // 输出: [1, 2, 3]
```
- **`shift()`**: 删除数组的第一个元素并返回它。
```javascript
let arr = [1, 2, 3];
let firstElement = arr.shift();
console.log(firstElement); // 输出: 1
console.log(arr); // 输出: [2, 3]
```
- **自定义删除特定值**[^1]:
使用 `splice()` 方法可以从指定位置删除元素。也可以通过扩展原型链实现更方便的功能:
```javascript
Array.prototype.removeByValue = function(val) {
for (let i = 0; i < this.length; i++) {
if (this[i] === val) {
this.splice(i, 1);
i--;
}
}
return this;
};
const myArray = [1, 2, 3, 4];
myArray.removeByValue(3);
console.log(myArray); // 输出: [1, 2, 4]
```
#### 2. 查找与过滤
- **`indexOf()` 和 `lastIndexOf()`**: 返回第一个匹配项的索引或者最后匹配项的索引;如果未找到则返回 `-1`。
```javascript
let arr = ['a', 'b', 'c'];
console.log(arr.indexOf('b')); // 输出: 1
console.log(arr.lastIndexOf('d')); // 输出: -1
```
- **`find()` 和 `findIndex()`**: 找到满足条件的第一个元素或其索引。
```javascript
let numbers = [1, 2, 3, 4];
let evenNumber = numbers.find(num => num % 2 === 0);
console.log(evenNumber); // 输出: 2
let indexEven = numbers.findIndex(num => num % 2 === 0);
console.log(indexEven); // 输出: 1
```
- **`filter()`**: 创建一个新的数组,其中包含所有符合条件的元素。
```javascript
let scores = [80, 70, 90, 60];
let passingScores = scores.filter(score => score >= 70);
console.log(passingScores); // 输出: [80, 70, 90]
```
#### 3. 遍历与映射
- **`forEach()`**: 对数组中的每一项执行回调函数。
```javascript
let fruits = ['apple', 'banana', 'cherry'];
fruits.forEach(fruit => console.log(fruit));
// 输出依次为 apple banana cherry
```
- **`map()`**: 将当前数组中的每个元素传递给提供的函数处理后生成新的数组。
```javascript
let nums = [1, 2, 3];
let doubledNums = nums.map(x => x * 2);
console.log(doubledNums); // 输出: [2, 4, 6]
```
- **`reduce()`**: 可以累积计算整个数组的结果。
```javascript
let sum = [0, 1, 2, 3].reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 输出: 6
```
#### 4. 排序与反转
- **`sort()`**: 默认按字符串升序排列,可以通过提供比较器改变行为。
```javascript
let letters = ['e', 'a', 'z', 'f'];
letters.sort(); // 字符串默认排序方式
console.log(letters); // 输出: ["a", "e", "f", "z"]
let values = [1, 10, 21, 2];
values.sort((a, b) => a - b); // 数字从小到大排序
console.log(values); // 输出: [1, 2, 10, 21]
```
- **`reverse()`**: 原地翻转数组顺序。
```javascript
let list = [1, 2, 3];
list.reverse();
console.log(list); // 输出: [3, 2, 1]
```
#### 5. 转换与其他操作
- **`join()`**: 把数组的所有元素连接成一个字符串。
```javascript
let words = ['hello', 'world'];
let sentence = words.join(' ');
console.log(sentence); // 输出: hello world
```
- **`slice()`**: 返回从原数组中选取的部分副本(不会影响原始数组)。
```javascript
let originalArr = [1, 2, 3, 4];
let subArr = originalArr.slice(1, 3);
console.log(subArr); // 输出: [2, 3]
```
---
### 特殊情况说明
当尝试访问不存在的属性时可能会遇到 `undefined` 的情形[^2]。
嵌套条件语句可用于复杂逻辑判断场景下进一步细化分支控制流程[^3]。
---