返回
彻底搞懂数组扁平化和数组去重,进大厂有把握!
前端
2023-09-17 17:04:29
# 前言
数组的扁平化和去重是面试里面出现频率比较高的两个,所以我们需要重视起来。本文章是基于死磕36个手写题 写出来的,感兴趣的可以去看一下呀!
数组去重
前端的更新是很快的,所以每一个问题都是有很多的解法,本文介绍的只是其中的一部分,希望对读者有所帮助。
## 一、数组去重
数组去重是指将一个数组中的重复元素去掉,只留下一个。
### 1. 方法一:利用Set数据结构
Set数据结构的特性是无序且不可重复,我们可以利用它来实现数组去重。
```javascript
const arr = [1, 2, 3, 2, 4, 5, 1];
const set = new Set(arr);
const newArr = [...set];
console.log(newArr); // [1, 2, 3, 4, 5]
2. 方法二:利用indexOf和lastIndexOf方法
我们可以利用indexOf和lastIndexOf方法来实现数组去重。
const arr = [1, 2, 3, 2, 4, 5, 1];
const newArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])) {
newArr.push(arr[i]);
}
}
console.log(newArr); // [1, 2, 3, 4, 5]
3. 方法三:利用filter方法
我们可以利用filter方法来实现数组去重。
const arr = [1, 2, 3, 2, 4, 5, 1];
const newArr = arr.filter((item, index) => {
return arr.indexOf(item) === index;
});
console.log(newArr); // [1, 2, 3, 4, 5]
二、数组扁平化
数组扁平化是指将一个多维数组变成一维数组。
1. 方法一:利用reduce方法
我们可以利用reduce方法来实现数组扁平化。
const arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
const newArr = arr.reduce((prev, curr) => {
return prev.concat(curr);
}, []);
console.log(newArr); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
2. 方法二:利用flat方法
ES6中提供了flat方法,可以实现数组扁平化。
const arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
const newArr = arr.flat();
console.log(newArr); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
三、常见面试题
1. 实现数组去重
实现一个函数,接收一个数组,返回一个去重后的数组。
const unique = (arr) => {
return [...new Set(arr)];
};
2. 实现数组扁平化
实现一个函数,接收一个多维数组,返回一个一维数组。
const flatten = (arr) => {
return arr.reduce((prev, curr) => {
return prev.concat(curr);
}, []);
};
四、总结
数组去重和数组扁平化都是前端面试中经常被问到的问题,本文介绍了这两种算法的实现方法以及常见的面试题,希望对读者有所帮助。