趁着早上空闲时间,整理一下Js数组去重的方式,数组去重在实际应用中是十分常见的,虽然很简单,但不同场景选择不同的方式提升自己的一种方式
// 1 - indexOf
// 数组的indexOf()返回某个指定元素在数组中首次出现的位置
// 如果没有则返回-1,该方法首先定义一个空数组res
// 然后调用indexOf()对原来的数组进行遍历判断,如果不在res中,则将其push到res中,最后将res返回即可获得去重的数组
function unique(arr){
if(!Array.isArray(arr)){
console.log('this is not a array')
return
}
let res = [];
for(let i = 0;i<len;i++){
if(res.indexOf(arr[i])=== -1){
res.push(arr[i])
}
}
return res
}
// indexOf
// 利用indexOf检查元素在数组中第一次出现的位置是否和元素现在的位置相等
// 如果不相等则说明该元素是重复的
function unique(arr){
if(!Array.isArray(arr)){
console.log('type error!')
return
}
return Array.prototype.filter.call(arr,(item,index) => {
return arr.indexOf(item) === index
})
}
// 相邻元素去重
// 这种方法首先调用了数组的排序方法sort(),
// 然后根据排序后的结果进行遍历及相邻元素对比,如果相同就跳过该元素
function unqiu(arr){
if(!Array.isArray(arr)){
console.log('this is not array')
return
}
arr = arr.sort()
let res = []
for(let i = 0;i<len;i++){
if(arr[i] !== arr[i-1]){
res.push(arr[i])
}
}
return res
}
// set与结构赋值去重
// Es6新增Set类型,最大的特点就是数据不重复,
// Set函数可以接受一个数组(或数组对象)作为参数初始化
function unique(arr){
if(!Array.isArray(arr)){
console.log('this is not array')
}
return [...new Set(arr)]
}
// 双重循环(不推荐)
// 先定义一个包含元素数组第一个元素的数组,然后遍历元素数组,将原始数组中的每一个元素与新数组中的每一个元素对比
// 如果重复则添加到新数组中,然后返回新数组
// 时间复杂度 O(n^2)
function unique(arr){
if(!Array.isArray(arr)){
console.log('this is not array')
return
}
let res = [arr[0]]
for(let i = 0;i < len;i++){
let flag = true
for(let j = 0;j<res.length;j++){
if(arr[i] === res[j]){
flag = true
break
}
}
if(flag){
res.-push(arr[i])
}
}
return res
}
扫码关注公众号,学习前端小知识