请你扮演一个资深前端,写7个js数组去重并解释
时间: 2023-08-04 20:27:42 浏览: 99
好的,以下是7个js数组去重的方法:
方法一:使用Set
```javascript
const arr = [1, 2, 3, 1, 2, 3];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3]
```
解释:Set是ES6中新增的数据结构,它可以用来存储任意类型的唯一值。使用Set去重是最简单的方法,将数组转化为Set,然后再转回数组即可。
方法二:使用indexOf
```javascript
const arr = [1, 2, 3, 1, 2, 3];
const uniqueArr = [];
arr.forEach(item => {
if (uniqueArr.indexOf(item) === -1) {
uniqueArr.push(item);
}
});
console.log(uniqueArr); // [1, 2, 3]
```
解释:使用indexOf方法判断元素是否已经存在于新数组中,不存在则将该元素推入新数组。
方法三:使用includes
```javascript
const arr = [1, 2, 3, 1, 2, 3];
const uniqueArr = [];
arr.forEach(item => {
if (!uniqueArr.includes(item)) {
uniqueArr.push(item);
}
});
console.log(uniqueArr); // [1, 2, 3]
```
解释:includes方法也可以判断元素是否已经存在于新数组中,不存在则将该元素推入新数组。
方法四:使用filter
```javascript
const arr = [1, 2, 3, 1, 2, 3];
const uniqueArr = arr.filter((item, index) => {
return arr.indexOf(item) === index;
});
console.log(uniqueArr); // [1, 2, 3]
```
解释:filter方法可以通过回调函数过滤数组中的元素,只保留符合条件的元素。在这里,利用indexOf判断元素是否是第一次出现,是则保留。
方法五:使用reduce
```javascript
const arr = [1, 2, 3, 1, 2, 3];
const uniqueArr = arr.reduce((prev, cur) => {
if (!prev.includes(cur)) {
prev.push(cur);
}
return prev;
}, []);
console.log(uniqueArr); // [1, 2, 3]
```
解释:reduce方法可以将一个数组转化为一个值,利用它也可以实现去重。在这里,prev表示新数组,cur表示当前元素,如果新数组中不存在当前元素,则将其推入新数组。
方法六:使用Map
```javascript
const arr = [1, 2, 3, 1, 2, 3];
const uniqueArr = [];
const map = new Map();
arr.forEach(item => {
if (!map.has(item)) {
map.set(item, true);
uniqueArr.push(item);
}
});
console.log(uniqueArr); // [1, 2, 3]
```
解释:利用Map数据结构的特性,将元素作为键存储,值为true。如果新元素已经存在于Map中,则跳过;否则将其推入新数组。
方法七:使用递归
```javascript
const arr = [1, 2, 3, 1, 2, 3];
function unique(arr) {
if (arr.length === 1) {
return arr;
}
const first = arr[0];
const rest = arr.slice(1);
return unique(rest.filter(item => item !== first)).concat(first);
}
const uniqueArr = unique(arr);
console.log(uniqueArr); // [1, 2, 3]
```
解释:递归是一种非常强大的方法,虽然不如其他方法简洁,但能够解决各种问题。在这里,递归调用本身,直到数组长度为1,然后将结果拼接起来。
阅读全文