数组去重:[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a‘, ‘a‘, NaN]

var ary = [false, true, undefined, null, NaN, 0, 1, 1, "1", "1", {}, {}, "a", "a", NaN];

1、indexOf 方法,无法识别NaN

Array.prototype.uniq = function() {
    return this.filter(function(item, pos) {
        return this.indexOf(item) == pos;
    });
};

2、hasOwnProperty,对象属性检测,无法识别 1,‘1’

Array.prototype.uniq = function() {
    var map = {};
    return this.filter(function(item) {
        return map.hasOwnProperty(item) ? false : (map[item] = true);
    });
};

3、type of 数据类型,无法区分{}

Array.prototype.uniq = function() {
    var prims = {
        boolean: {},
        number: {},
        string: {}
    };
    var obj = [];
    return this.filter(function(item) {
        var type = typeof item;
        if (type in prims) {
            return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true);
        } else {
            return obj.indexOf(item) != -1 ? false : (obj.push(item));
        };
    });
};

4、数据类型+对象  //效果好,能够准确区分

Array.prototype.uniq = function () {
    var map = {};
    return this.filter(function (item) {
        var key = typeof item + item;
        return map.hasOwnProperty(key) ? false : (map[key] = true);
    });
};
// CONSOLE
[false, true, undefined, null, NaN, 0, 1, "1", {}, "a"]

5、JSON.stringify  //无法区分NaN,null

Array.prototype.uniq = function() {
    var map = {};
    return this.filter(function(item) {
        var key = JSON.stringify(item);
        return map.hasOwnProperty(key) ? false : (map[key] = true);
    });
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值