返回

彻底搞懂数组扁平化和数组去重,进大厂有把握!

前端







# 前言
数组的扁平化和去重是面试里面出现频率比较高的两个,所以我们需要重视起来。本文章是基于死磕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);
  }, []);
};

四、总结

数组去重和数组扁平化都是前端面试中经常被问到的问题,本文介绍了这两种算法的实现方法以及常见的面试题,希望对读者有所帮助。