去除数组重复成员

本文列举几种去除数组重复成员的方法:

1、使用ES6中新增的Set结构:利用Set结构中没有重复元素这一特性。

function remove_duplicate(array){
	return Array.from(new Set(array));
}

还有一种类似思路,不使用Array.from,使用扩展运算符,如下:

let arr=[3,5,2,3,5,6,5];
let newarr=[...new Set(arr)];

在这里插入图片描述
但是这种思路下无法去除重复的空对象{}。因为Set内部判断两个值是否不同,使用的算法叫做“ Same-value-zero equality ” ,它类似于精确相等运算符(===),主要区别是 NaN 等于自身,而精确相等运算符任务 NaN 不等于自身。并且两个对象总是不相等的,所以无法去除重复的空对象{}
去除数组重复成员_第1张图片
在这里插入图片描述

2、使用ES6中的Map结构进行去重:创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果。

function remove_duplicate(arr){
    let map=new Map();
    let array=new Array();
    for(let i=0;i

在这里插入图片描述
同样的,使用该方法也不能去除重复的空对象{}。因为Map对比的是引用地址,引用地址不同则视为不相同。只有对同一个对象的引用,Map结构才将其视为同一个键。
3、利用includes方法:

function remove_duplicate(arr){
    return arr.reduce((prev,cur)=>pre.includes(cur)?prev:[...prev,cur],[]);
}
或者
function remove_duplicate(array){
    var newArray=[];
    for(var i=0;i

在这里插入图片描述
该方法不能去除空对象{}。includes内部使用的不是严格相等运算符,所以能判断出NaN,但是对于对象的判断是根据引用来判断的,所以无法去除重复的空对象{}。
4、利用对象属性:由于对象的属性不能相同的特点可以用来去重。

function remove_duplicate(array){
    var newArray=[];
    var obj={};
    for(var i=1;i

在这里插入图片描述
一样的思路,还可以使用hasOwnProperty方法,判断是否存在对象属性。

function remove_duplicate(arr){
    var obj ={};
    return arr.filter(function(item,index,arr){
        return obj.hasOwnProperty(typeof item+item)?false:(obj[typeof item+item]= true)   
    })
}

在这里插入图片描述
这种思路可以去除所有的重复元素。
5、利用几个常用的方法去除重复元素,比较时使用相等运算符,所以无法去除NaN和空对象{}。
- splice方法去重,是ES5中最常用的方法,需要使用for循环。

function remove_duplicate(array){
    for(var i=0;i

在这里插入图片描述
由于使用的是相等运算符==,无法去除NaN和空对象。
- indexOf方法:新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组。

function remove_duplicate(array){
    var newArray=[];
    for(var i=0;i

在这里插入图片描述
- sort方法:利用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对。

function remove_duplicate(array){
    var array=array.sort();
    var newArray=[array[0]];
    for(var i=1;i

在这里插入图片描述
- 递归去重

function remove_duplicate(arr){
    var array=arr;
    var len=array.length;
    array.sort(function(a,b){
        return a-b;
    })
    function loop(index){
        if(index>=1){
            if(array[index]===array[index-1]){
                array.splice(index,1);
            }
            loop(index-1);
        }
    }
    loop(len-1);
    return array;
}

在这里插入图片描述
6、filter方法:

function remove_duplicate(arr){
    return arr.filter(function(item,index,arr){
        return arr.indexOf(item,0)===index;   
    });
}

在这里插入图片描述
该方法不能去除空对象{}。且NaN直接被去掉了。这里不太理解为什么直接去掉了NaN,大家懂的话评论里讲一下呀!

你可能感兴趣的:(去除数组重复成员)