js 数组去重
js 数组去重
1、forEach、indexOf
利用数组原型对象上的forEach方法遍历,indexOf方法筛选
arrayUnique (arr) {
const newArr = []
arr.forEach(item => {
if (newArr.indexOf(item) === -1) {
newArr.push(item)
}
})
return newArr
}
// 简洁写法
arrayUnique (arr, newArr = []) {
arr.forEach(item => newArr.indexOf(item) === -1 ? newArr.push(item) : '')
return newArr
},
2、forEach、includes
利用数组原型对象上的forEach方法遍历,includes方法筛选
arrayUnique2 (arr) {
const newArr = []
arr.forEach(item => {
if (!newArr.includes(item)) {
newArr.push(item)
}
})
return newArr
}
// 简洁写法
arrayUnique2 (arr, newArr = []) {
arr.forEach(item => !newArr.includes(item) ? newArr.push(item) : '')
return newArr
},
3、forEach、对象属性存在
forEach方法遍历,再借助对象属性存在的特性,如果不存在则放入新数组
arrayUnique3 (arr) {
const obj = {}
const newArr = []
arr.forEach(item => {
if (!obj[item]) {
obj[item] = 1
newArr.push(item)
}
})
return newArr
}
// 简洁写法
arrayUnique3(arr, obj = {}, newArr = []) {
arr.forEach(item => !obj[item] ? (() => { obj[item] = item; newArr.push(item) })() : '') // 自执行匿名函数
return newArr
},
4、filter删选
利用数组原型对象上的filter进行删选
arrayUnique4 (arr) {
return arr.filter((item, index) => arr.indexOf(item) === index)
}
5、ES6的Set结构、Array.from方法
创建成员值唯一的Set结构的实例并利用ES6的Array.from转换为数组
arrayUnique5 (arr) {
return Array.from(new Set(arr))
}