数组去重

数组去重常用方法

1.ES6的new Set()去重

1
2
3
let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6]
console.log([...new Set(arr)])
// [1, 2, 3, 4, 6]

Set无法去重引用类型的数据(对象数组),如果数组中的值都是简单的string或者number,可以使用Set去重

2.使用new Map()去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14

function unique(arr){
const result = []
const arrMap = new Map()
for(let i = 0 ; i < arr.length ; i++){
if(!arrMap.has(arr[i])){
arrMap.set(arr[i])
result.push(arr[i])
}
}
return result
}
let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6]
console.log(unique(arr)) // [1, 2, 3, 4, 6]

如果是数组对象的话也可以在map中存放主键,来达到对象去重

基本的Map()方法
| Method | Description |
| —- | —- |
| new Map() | 创建新的 Map 对象。 |
| set() | 为 Map 对象中的键设置值。 |
| get() | 获取 Map 对象中键的值。 |
| entries() | 返回 Map 对象中键/值对的数组。 |
| keys() | 返回 Map 对象中键的数组。 |
| values() | 返回 Map 对象中值的数组。 |
| clear() | 删除 Map 中的所有元素。 |
| delete() | 删除由键指定的元素。 |
| has() | 如果键存在,则返回 true。 |

3.使用includes去重

1
2
3
4
5
6
7
8
9
10
11
function unique(arr){
const result = []
for(let i = 0 ; i < arr.length ; i++){
if(!result.includes(arr[i])){
result.push(arr[i])
}
}
return result
}
let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6]
console.log(unique(arr)) // [1, 2, 3, 4, 6]

4.最古老的方法,双循环去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function unique(arr) {
for (let i = 0, len = arr.length; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
len--;
}
}
}
return arr
}
let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6]
console.log(unique(arr)) // [1, 2, 3, 4, 6]

5.最有趣的去重方法,filter去重

1
2
3
4
5
function unique5(arr){
return arr.filter((item,index)=> arr.indexOf(item) === index)
}
let arr = [1, 1, 2, 3, 4, 4, 2, 3, 6]
console.log(unique5(arr))