法1 双重 for 循环 + 开关思想
let arr = [10, 20, 50, 10, 80, 20, 60, 40, 71, 18, 30, 30]
let newArr = []
for (let i = 0; i < arr.length; i++) {
let flag = true
for (let j = 0; j < newArr.length; j++) {
if (arr[i] === newArr[j]) {
flag = false
break
}
}
if (flag) {
newArr.push(arr[i])
}
}
console.log(newArr)
法2 双重 for 循环 + splice()
let arr = [10, 20, 50, 10, 80, 20, 60, 40, 71, 18, 30, 30]
function uniqueArr(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
}
console.log(uniqueArr(arr))
法3 indexOf() + for 循环
let arr = [10, 20, 50, 10, 80, 20, 60, 40, 71, 18, 30, 30]
let newArr = []
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i])
}
}
console.log(newArr)
法4 indexOf() + filter()
let arr = [10, 20, 50, 10, 80, 20, 60, 40, 71, 18, 30, 30]
function uniqueArr(arr) {
return arr.filter((item, index) => {
return arr.indexOf(item) === index
})
}
console.log(uniqueArr(arr))
法5 展开运算符 + new Set()
let arr = [10, 20, 50, 10, 80, 20, 60, 40, 71, 18, 30, 30]
let newArr = [...new Set(arr)]
console.log(newArr)
法6 forEach循环 + new Set()
let arr = [10, 20, 50, 10, 80, 20, 60, 40, 71, 18, 30, 30]
let dataSet = new Set()
let resSet = []
arr.forEach(item => {
if (!dataSet.has(item)) {
resSet.push(item)
}
dataSet.add(item)
})
console.log(resSet);
法7 利用 Map() 数据结构去重
let arr = [10, 20, 50, 10, 80, 20, 60, 40, 71, 18, 30, 30]
let unique = (arr) => {
let seen = new Map()
return arr.filter((item) => {
return !seen.has(item) && seen.set(item, 1)
})
}
console.log(unique(arr))
法8 利用 reduce() + includes() 去重
let arr = [10, 20, 50, 10, 80, 20, 60, 40, 71, 18, 30, 30]
function unique(array) {
return array.reduce((prev, next) => {
return prev.includes(next) ? prev : [...prev, next]
}, [])
}
console.log(unique(arr))