JavaScript 数组去重的四种方法

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

(一)使用方法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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值