文章目录
- 一、双指针
- 二、filter方法
- 三、includes
- 四、indexOf
- 五、reduce()
- 六、set
一、双指针
基本思想:遍历数组,两层for循环比较元素是否相等,相等就删除重复元素。
代码如下
for(var i=0;i<arr.length;i++)
{for(var j=i+1;j<arr.length;j++){if(arr[i]==arr[j]){arr.splice(j,1)}}
}console.log(arr)
二、filter方法
基本思想:filter方法是会对数组中每个元素去调用函数方法,true就保存下来,所以新声明一个数组去保存;而indexOf返回的总是元素在数组中第一次出现的位置,若它与当前元素相等则保存下来。
代码如下
var res=arr.filter((value,index)=>
{return arr.indexOf(value)==index
})
三、includes
基本思想:利用includes方法去判断新声明的数组中是否已存在待操作的元素。
var arr=[1,1,1,2,3,4,5,5]
var res=[]
for(var i=0;i<arr.length;i++)
{if(!res.includes(arr[i])){res.push(arr[i])}
}
console.log(res)
四、indexOf
基本思想:同上,不过是利用indexOf去判断
代码如下(示例):
var arr=[1,1,1,2,3,4,5,5]
var res=[]
for (var i=0;i<arr.length;i++)
{if(res.indexOf(arr[i])==-1){res.push(arr[i])}
}
console.log(res)
五、reduce()
与includes()原理相同,不过是利用reduce方法遍历数组+返回结果,代码更简洁。
var arr=[1,1,1,2,3,4,5,5]var res=arr.reduce((prev,cur)=>
{if( !prev.includes(cur)){prev.push(cur)}return prev
},[])
console.log(res)
六、set
基本思想:直接利用ES6中set方法去重,不过这样去重后返回的是一个集合形,需要再转换。
var res=Array.from( new Set(arr))