### 常见 JavaScript 数组面试题及解答
#### 1. 如何判断一个变量是否是数组?
在 JavaScript 中,判断一个变量是否是数组可以使用 `Array.isArray()` 方法。该方法返回一个布尔值,表示传入的参数是否是数组类型。例如:
```javascript
Array.isArray([1, 2, 3]); // true
Array.isArray("string"); // false
```
#### 2. 如何实现数组去重?
JavaScript 中可以通过多种方式实现数组去重。一种常见的方式是利用 `Set` 数据结构,它只存储唯一的值。例如:
```javascript
function removeDuplicates(arr) {
return [...new Set(arr)];
}
console.log(removeDuplicates([1, 2, 2, 3])); // [1, 2, 3]
```
#### 3. 如何查找数组中的最大值?
查找数组中的最大值可以通过 `Math.max()` 函数结合展开运算符来实现。例如:
```javascript
const numbers = [1, 2, 3, 4, 5];
const max = Math.max(...numbers); // 5
```
#### 4. 如何实现数组的深拷贝?
数组的深拷贝可以通过 `JSON.parse()` 和 `JSON.stringify()` 的组合实现。这种方法适用于数组中不包含函数或 `undefined` 等特殊值的情况。例如:
```javascript
const original = [1, 2, [3, 4]];
const copy = JSON.parse(JSON.stringify(original));
copy[2][0] = 5;
console.log(original); // [1, 2, [3, 4]]
console.log(copy); // [1, 2, [5, 4]]
```
#### 5. 如何合并两个数组?
合并两个数组可以使用展开运算符 `...` 或者 `concat()` 方法。例如:
```javascript
const arr1 = [1, 2];
const arr2 = [3, 4];
const merged = [...arr1, ...arr2]; // [1, 2, 3, 4]
```
#### 6. 如何实现数组的扁平化?
扁平化数组可以通过递归和 `reduce()` 方法实现。例如:
```javascript
function flatten(arr) {
return arr.reduce((result, item) => {
return result.concat(Array.isArray(item) ? flatten(item) : item);
}, []);
}
console.log(flatten([1, [2, [3, 4], 5]])); // [1, 2, 3, 4, 5]
```
#### 7. 如何实现数组的过滤?
可以使用 `filter()` 方法根据条件过滤数组中的元素。例如:
```javascript
const numbers = [1, 2, 3, 4, 5];
const even = numbers.filter(num => num % 2 === 0); // [2, 4]
```
#### 8. 如何实现数组的排序?
数组的排序可以通过 `sort()` 方法实现。默认情况下,`sort()` 按字符串顺序排序。如果需要按数字排序,则需要传入一个比较函数。例如:
```javascript
const numbers = [3, 1, 4, 2];
numbers.sort((a, b) => a - b); // [1, 2, 3, 4]
```
#### 9. 如何实现数组的分组?
可以通过 `reduce()` 方法将数组中的元素按特定条件分组。例如,按对象的某个属性分组:
```javascript
const people = [
{ name: 'Alice', age: 20 },
{ name: 'Bob', age: 20 },
{ name: 'Charlie', age: 30 }
];
const grouped = people.reduce((acc, person) => {
if (!acc[person.age]) {
acc[person.age] = [];
}
acc[person.age].push(person);
return acc;
}, {});
console.log(grouped);
// {
// '20': [ { name: 'Alice', age: 20 }, { name: 'Bob', age: 20 } ],
// '30': [ { name: 'Charlie', age: 30 } ]
// }
```
#### 10. 如何实现数组的交集?
可以通过 `filter()` 和 `includes()` 方法实现两个数组的交集。例如:
```javascript
const arr1 = [1, 2, 3];
const arr2 = [2, 3, 4];
const intersection = arr1.filter(item => arr2.includes(item)); // [2, 3]
```