//* Set去重 ES6
function unique(arr) {
return Array.from(new Set(arr))
}
console.log(unique(arr))
//* splice去重
function unique1(arr) {
for (let i = 0; i < arr1.length; i++) {
for (let j = i + 1; j < arr1.length; j++) {
//判断前后两位数是否相同
if (arr1[i] == arr1[j]) {
arr1.splice(j, 1)
// splice会更改数组长度,需要减1
j--
}
}
}
return arr
}
console.log(unique1(arr))
//* indexOf去重
//判断数组是否存在这个数,存在返回0,如果不存在返回-1,将数值添加到新建数组
function unique2(arr) {
if (!Array.isArray(arr)) {
console.log('type error')
return
}
let array = []
for (let i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i] === -1)) {
array.push(arr[i])
}
}
return array
}
//* 利用include去重
function unique3(arr) {
if (!Array.isArray(arr)) {
console.log('type error')
}
const array = []
for (let i = 0; i < arr.length; i++) {
//includes检测数组是否有某个值
if (!array.includes(arr[i])) {
array.push(arr[i])
}
}
return array
}
// 利用hasOwnProperty
function unique(arr) {
let obj = {}
return arr.filter(item => {
// typeof item + item可以输出"item数据类型 + item值"的字符串结果
// hasOwnPrototype()来判断obj内是否有这个数据类型的数据,如果有返回false,没有的话返回true,filter会将其保留
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
})
}
数组去重的方法还有:
- 利用sort
- 利用对象属性不能相同的特点进行去重(不建议用)
- 利用filter
- 使用递归
- map去重