第一类 利用循环,indexOf include等查看
这一类方法都差不多,利用forEach遍历 然后查看里面是否有对应的item,没有的话就加入到新建立的数组里
1.双重for循环剔除
// 1. 先建立一个数组
let arr = [1,2,3,1,2,3]
// 2.创建去重方法
function unqArr(arr){
for(let i=0; i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
// 3.这个就是进行两两相比 如果相等就剔除
if(arr[i] === arr[j]){
arr.splice(y,1);
y--
}
}
}
return arr
}
2. 简单的forEach + indexOf / includes
这方法都差不多 也可以用filter过滤,不过都类似,主要就是先遍历,然后查看数组里面有没有这个值,没有就push上去
let arr = [1,2,3,1,2,3];
function unqArr(arr){
// 1. 创建接收的空数组
let arr2 = [];
// 2. 开始遍历
/* 这个是 indexOf
arr.forEach(item ={
if(arr2.indexOf(item) === -1){
arr2.push(item)
}
})
*/
// 这个就是includes 本质和indexOf没区别
arr.forEach(item=>{
if(!arr2.includes(item)){
arr2.psuh(item)
}
})
return arr2
}
第二类 利用obj的key map set的唯一性
1. set 这个一行就搞定了
console.log([...new Set(arr)])
2.map 和 obj
map和obj 本质都一样,写起来方法也已类似,就一起写了
let arr = [1,2,3,1,2,3]
function unqArr(arr){
/*
// map要建立map对象 然后利用 has 查看 set加入退出条件
let map = new Map()
let arr2 = []
arr.forEach(item =>{
if(!map.has(item)){
map.set(item,true)
arr2.push(item)
}
})
*/
// obj 方法 这里面的循环可以用for 也可以用forEach
let obj={}
let arr2=[]
arr.forEach(item =>{
// 本质跟map一样
if(!obj[item]){
arr2.push(item);
obj[item] = true;
}
})
/*
当然可以用for循环遍历 跟上面一样的
for(let i=0;i<arr.length;i++){
if(!obj[arr[i]]){
arr2.push(arr[i]);
obj[arr[i]] = true
}
}
*/
return arr2
}