1. 使用Set方法
// 第一种使用Set方法
let arr = [2, 2, 3, 4, 1, 23, 1, 32, 1, 1, 1, 3]
function deRepeat(arr) {
return [...new Set(arr)]
}
console.log(deRepeat(arr));
2. 使用Map方法
// 使用Map方法
function deRepeat(arr) {
let a = new Map()
let res = []
for (let key of arr) {
a.set(key, '')
}
for (let i of a.keys()) {
res.push(i)
}
return res
}
// 或者
// 使用Map方法
function deRepeat(arr) {
let a = new Map()
for (let key of arr) {
a.set(key, '')
}
return [...a.keys()]
}
console.log(deRepeat(arr));
3. 使用reduce+includes方法
// 使用reduce方法
function deRepeat(arr) {
return arr.reduce((a, b) => {
if (!a.includes(b)) {
a.push(b)
}
return a
}, [])
}
4. 使用filter+indexOf方法
// 使用filter+indexOf方法 过滤当前的元素 遍历出某个字符第一次出现的索引位置与当前的遍历的索引值是否相同 如果相同返回当前索引所在的字符,否则返回为空
function deRepeat(arr) {
return arr.filter((item, index) => arr.indexOf(item) === index ? item : '')
}
console.log(deRepeat(arr));
5. 使用map方法+indexOf的方法
// 使用map+indexOf方法 过滤当前的元素 遍历出某个字符第一次出现的索引位置与当前的遍历的索引值是否相同 如果相同返回当前索引所在的字符,否则返回为空
// 并且将返回的值进行转换 使用join的方法将数组转换成一个字符串,在使用split的方法将字符串进行分隔,然后使用map方法将原来的数组进行字符类型的转换
function deRepeat(arr) {
return arr.map((item, index) => arr.indexOf(item) === index ? item : '').join('').split('').map(x => Number(x))
}
console.log(deRepeat(arr));
6. 使用map对象+hasOwnProperty方法
// 使用map存储不重复的数字
// 实现思路:就是给map对象添加属性 使用hasOwnProperty 方法来判断 当前的map对象中是否 已存在某个属性 如果不存在 则将当前遍历的元素 push到一个行的数组中去
function deRepeat(arr) {
let map = {}
let res = []
for (let i of arr) {
if (!map.hasOwnProperty(i)) {
map[i] = 1
res.push(i)
}
}
return res
}
console.log(deRepeat(arr));
7. 使用splice方法实现数组的去重
let arr = [2, 2, 3, 4, 1, 23, 1, 32, 1, 1, 1, 3]
// 使用splice实现数组的去重
Array.prototype._derepeat = function () {
let arr = this
for (let m = 0; m < arr.length; m++) {
for (let n = m + 1; n < arr.length; n++) {
if (arr[m] === arr[n]) arr.splice(n, 1)
}
}
return arr
}
console.log(arr._derepeat()); // [2, 3, 4, 1, 23, 32, 1]