数组去重的几种方法
记录一些数组去重的方法,如果有错误的地方,还望指正
1.利用es6中的Set()去重特性
const arr = [1,2,3,6,8,2,9,5,6,4,9]
function uniq(arr) {
return [...new Set(arr)]
}
const resultArr1 = uniq(arr)
console.log(resultArr1)
2.利用includes或者indexOf
const arr = [1,2,3,6,8,2,9,5,6,4,9]
function uniq(arr) {
const temp = []
arr.forEach(item => {
return temp.includes(item) ? '' : temp.push(item)
})
return temp
}
const resultArr1 = uniq(arr)
console.log(resultArr1)
3.暴力双循环
const arr = [1,2,3,6,8,2,9,5,6,4,9]
function uniq(arr) {
const temp = []
for(let i = 0; i < arr.length; i++) {
let repeat = false
for (let j = 0; j < temp.length; j++) {
if (arr[i] === temp[j]) {
repeat = true
break
}
}
if(!repeat) {
temp.push(arr[i])
}
}
return temp
}
const resultArr1 = uniq(arr)
console.log(resultArr1)
4.排序后,前一个和后一个比较,不相同就放入数组
const arr = [1,2,3,6,8,2,9,5,6,4,9]
function uniq(arr) {
const temp = []
const sortArr = arr.sort()
for(let i = 0; i < sortArr.length; i++) {
if (sortArr[i] !== sortArr[i+1]) {
temp.push(sortArr[i])
}
}
return temp
}
const resultArr1 = uniq(arr)
console.log(resultArr1)
5.splice改变原数组
const arr = [1,2,3,6,8,2,9,5,6,4,9]
function uniq(arr) {
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--
}
}
}
return arr
}
const resultArr1 = uniq(arr)
console.log(resultArr1)
6.利用对象 速度快但是耗费内存
const arr = [1,2,3,6,8,2,9,5,6,4,9]
function uniq(arr) {
const temp = []
const obj = {}
for(let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
obj[arr[i]] = true
temp.push(arr[i])
}
}
return temp
}
const resultArr1 = uniq(arr)
console.log(resultArr1)
7.利用reduce
const arr = [1,2,3,6,8,2,9,5,6,4,9]
function uniq(arr) {
return arr.reduce((pre, cur, arr1) => pre.includes(cur) ? pre : [...pre,cur], [])
}
const resultArr1 = uniq(arr)
console.log(resultArr1)
8.使用filter
function uniq(array) {
return array.filter((item, index, arr1) => {
return arr1.indexOf(item) === index
})
}