一、双指针
基本思想:遍历数组,两层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))