JavaScript 数组去重的四种方法

版权声明:本文为博主原创文章,若转载请附上原地址~ https://blog.csdn.net/sinat_27088253/article/details/53642339

四种方法都需要借助一个临时数组,并最终返回这个临时数组。

(一)使用方法indexOf判断当前元素是否已经存在于临时数组中,如果不存在(结果返回-1),则push到临时数组中。

function removeDuplicatedItem1(arr){
            var retArr=[];
            for(var i=0;i<arr.length;i++){
                if(retArr.indexOf(arr[i])===-1){//===判断值与类型是否完全相等,若类型不同也算不同的元素
                    retArr.push(arr[i]);
                }
            }
            return retArr;
        }

(二)利用对象属性的唯一性,把数组元素作为临时创建的一个对象的属性,若不存在则push

function removeDuplicatedItem2(arr){
            var temp={};//创建的一个临时对象,用于存储数组元素作为其属性
            var retArr=[];

            for(var i=0;i<arr.length;i++){
                if(!temp[arr[i]]){//判断属性是否存在,当然也可以判断当前属性是否等于1
                    temp[arr[i]]=1;//给当前属性值赋值,避免为空
                    retArr.push(arr[i]);
                }
            }

            return retArr;

        }

(三) 使用forEachindexOf相结合,判断当前元素的下标值与indexOf返回的结果是否一致,若一致说明当前元素是第一次出现,则push到临时数组中

function removeDuplicatedItem3(arr){
            var retArr=[];
            arr.forEach(function(item,i,ar){
                if(arr.indexOf(item)==i){//判断当前元素是否是第一次出现
                    retArr.push(item);
                }

            });

            return retArr;
        }

(四)先对原数组排序,可以使用sort,因为只是让相同的元素聚集到一起,对于排序规则没有要求。用一个临时变量temp存储当前刚push进临时数组的item,数组指针后移,如果此时指针所指的item与temp不相等,则push到临时数组中,否则,指针接着后移,直到原数组结束。

function removeDuplicatedItem4(arr){
            if(arr.length<=0){//提前判断数组中是否有元素,防止数组越界
                return -1;
            }
            var retArr=[];
            arr.sort();
            var nowItem=arr[0];//初始值存储原数组中的第一个元素
            retArr.push(nowItem);
            for(var i=1;i<arr.length;i++){
                if(arr[i]!=nowItem){
                    retArr.push(arr[i]);
                    nowItem=arr[i];//改变nowItem的值
                }
            }

            return retArr;
        }

参考资料:http://www.cnblogs.com/leonwang/p/4845576.html

猜你喜欢

转载自blog.csdn.net/sinat_27088253/article/details/53642339