js数组去重

在前端面试中,经常会被问到这样的一个问题;就是数组去重的问题,就是去掉重复内容

实现的方法有很多


下面我主要介绍三种方法:

方法一

是我们平常思路一般想到的;也是最其本的方法,就是两次for循坏,进行一一比较

//最基本的方法,两次for循坏,进行一一比较
Array.prototype.unique1 = function () {
    //返回的结果数组;进来就取出第一个元素
    var result = [this[0]];
    for(var i = 1; i < this.length; i++){
        var flag = true;
        for(var j = 0; j < result.length; j++){
            if(this[i] == result[j]){
                flag = false;
                break;
            }
        }
        //如果两个数组内容不相等,就把其加到返回的数组中
        if(flag){
            result.push(this[i]);
        }
    }
    return result;
};
var test = [23,'sd',23,2,45,45,23,'sd','打击',23];
console.log(test.unique1());

方法二

利用indexOf()方法进行判断,一次for循坏就能取出,比第一种方法效率高

//第二种方法,利用indexOf()方法判断
Array.prototype.unique2 =function () {
    //定义返回的临时数组
    var result = [];
    for(var i = 0; i < this.length; i++){
        if(result.indexOf(this[i]) == -1){
            //遍历数组,如果返回的结果数组找不到,就把其加进去
            result.push(this[i]);
        }
    }
    return result;
};
var test = [23,'sd',23,2,45,45,23,'sd','打击',23];
console.log(test.unique2());

方法三

利用对象的特点进行判断取出,效率最佳

//第三种方法,利用对象取职判断,与第二种方法思想相似(效率比较高)
Array.prototype.unique3 = function () {
    //定义临时返回数组
    var result = [];
    //定义临时存值对象
    var obj = {};
    for(var i = 0; i < this.length; i++){
        //遍历数组,判断对象中是否存在相同的数组内容,以key值形式来判断
        if(!obj[this[i]]){
            //如果不存在,push到返回的数组中
            result.push(this[i]);
            //同时把其当作key值的形式存入对象,其value值都为1
            obj[this[i]] = 1;
        }
    }
    return result;
};
var test = [23,'sd',23,2,45,45,23,'sd','打击',23];
console.log(test.unique3());










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值