js数组去重

首先定义一个数组用来去重:

var arr = ['a', 'a',1,1,'1','1',true,true,'true','true',undefined,undefined, 'undefined','undefined',null,null,'null','null', NaN, NaN,'NaN','NaN', {},{}, '{}','{}'];

console.log(arr)

1、下面的方法是在网上搜索根据对象暂存去重:

function unique(arr){
            var unique = [];
            var temp = {};
            for(var i=0;i<arr.length;i++){
                if(!temp.hasOwnProperty(arr[i])){
                    temp[arr[i]] = arr[i];
                    unique.push(temp[arr[i]]);
                }
            }
            return unique;
        }

打印的结果:

["a", 1, true, undefined, null, NaN, {…}, "{}"]

对1与“1”不能进行区分

2、下面的方法也是在网上搜索找下的方法

function array_unique(arr) {
            return arr.filter(function(e,i){
                return arr.indexOf(e)===i; 
            })
        }

打印结果:

["a", 1, "1", true, "true", undefined, "undefined", null, "null", "NaN", {…}, {…}, "{}"]

对NaN与{}对象不能进行区分

3、下面是自己整理的方法

//判断数据类型
        function type(data){
            var type = typeof(data);
            if(type == 'object'){
                var obj = Object.prototype.toString;
                type = obj.call(data)
            }
            return type;
        }

这使用上面的类型判断来拼接这个暂存对象的键,避免数字与字符混合存在时键混乱;

下面这个方法结合type方法进行去重:

//数组去重,利用对象使用hasOwnProperty
        Array.prototype.unique = function(){
            var unique = [];
            var temp = {};
            for(var i=0;i<this.length;i++){
                var str = type(this[i]) + this[i];//利用type方法返回值拼接作为对象键
                if(!temp.hasOwnProperty(str)){
                    temp[str] = this[i];
                    unique.push(temp[str]);
                }
            }
            return unique;
        }

["a", 1, "1", true, "true", undefined, "undefined", null, "null", NaN, "NaN", {…}, "{}"]

根据上面数据看是已去重,可能中间有测试不到的地方

返回的结果:arr.unique()调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值