目录


数组的去重方法有很多,今天就来汇总一下数组去重的方法。

1. Set (集合)

Set是ES6中提出的新的数据结果,他表示一个集合,详见:​​【数据结构】ES6中的Set(集合)​

利用集合中元素不能重复的特性来实现数组的去重:

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

2. indexOf

indexOf()方法会返回某个元素在数组的中首次出现的位置,如果没有,就返回-1。

let arr = [1,2,3,2,1]
let res = [];
for (let i = 0; i < arr.length; i++) {
if(res.indexOf(arr[i]) == -1){
res.push(arr[i]);
}
}
console.log(res) // [1, 2, 3]

除此之外,还可以判断当前元素的索引是不是第一出现:

let arr = [1,2,3,2,1]
let res = [];
for (let i = 0; i < arr.length; i++) {
if(arr.indexOf(arr[i]) == i){
res.push(arr[i]);
}
}
console.log(res) // [1, 2, 3]

3. 排序,比较相邻元素

let arr = [1,2,3,2,1]
let res = [arr[0]]
arr.sort();
for (let i = 1; i < arr.length; i++) {
if(arr[i]!== res[res.length-1]){
res.push(arr[i]);
}
}
console.log(res) // [1, 2, 3]

4. splice

let arr = [1,2,3,2,1]
let res = [];
for(let i = 0; i< arr.length; i++){
for(let j = i + 1; j < arr.length; j++){
if(arr[i] === arr [j]){
arr.splice(j, 1)
j--
}
}
}
console.log(arr)

5. filter + indexOf

let arr = [1,2,3,2,1]

let res = arr.filter((item, index) => {
return arr.indexOf(item) === index
})

console.log(res)

6. map

let arr = [1,2,3,2,1]
let map = new Map()
let res = arr.filter(item => {
return !map.has(item) && map.set(item, 1)
})
console.log(res)