1.使用indexOf方法
function unique(arr) {
let res = []
for (let child of arr) {
if (res.indexOf(child) === -1) {
res.push(child)
}
}
return res
}
该方法对于NaN类型,Symbol等类型无法去重
2..使用includes方法
function unique(arr) {
let res = []
for (let child of arr) {
if (!res.includes(child)) {
res.push(child)
}
}
return res
}
该方法弊端与方法1类似
3.map方法
创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果。
function unique(arr) {
let map = new Map()
let res = []
for (let i = 0; i < arr.length; i++) {
if (map.has(arr[i])) {
map.set(arr[i], true)
} else {
map.set(arr[i], false)
res.push(arr[i])
}
}
return res
}
4.使用Set方法,简单快捷
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。
function unique(arr) {
return Array.from(new Set(arr))
}
5.filter+indexOf方法
function unique(arr) {
return arr.filter((item, index) => {
//判断该元素一次出现的位置和当前位置是否相等,如果相等则返回
return arr.indexOf(item) === index
})
}
6.双重循环用splice方法去重
双层循环,外层循环元素,内层循环比较值,值相同时,则删除该值,不建议使用该方法,比较耗性能
function unique(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] === arr[i]) {
arr.splice(j, 1)
j--
}
}
}
return arr
}