javascript---数组去重

3 篇文章 0 订阅
3 篇文章 0 订阅

在我们平时开发过程中,对数组去重是经常遇到的事,下面就去重复方法给大家介绍常用的几种方式

第一种方式:嵌套循环(这个方法兼容性是最好的,但是性能比较差,需要进行两次循环)

var arr = [1, 2, 3, 4, 5, 6, 2, 1, 3, 4, 2, 1, 5];
function unique(arr) {
    //定一个空数组(也是去重后返回的结果数组)
    var result = [];
    for (var i = 0, len = arr.length; i < len; i++) {
        var tempArr=arr[i];
        for (var j = 0, len1 = result.length; j < len1; j++) {
            var tempResult=result[j];
            // 如果在结果数组循环中找到了该元素,则跳出循环,进入下一个源数组元素的判断
            if(tempArr===tempResult){
                break;
            }
        }
        // 如果把结果数组循环完都没有找到该元素,就将该元素添加到数组中
        if(j===result.length){
            result.push(tempArr)
        }
    }
    return result
}
console.log(unique(arr))

第二种方式:利用数组的 indexOf 属性(IE8以及更早的版本不支持该方法)

var arr = [1, 2, 3, 4, 5, 6, 2, 1, 3, 4, 2, 1, 5];
function unique(arr) {
    //定一个空数组(也是去重后返回的结果数组)
    var result=[];
    for(var i=0,len=arr.length;i<len;i++){
        if(result.indexOf(arr[i])<0){
            result.push(arr[i])
        }
    }
    return result
}
console.log(unique(arr))

第三种方式:利用js对象键值对(兼容性较好);但是这个方法的缺点是(在js对象中数字1和字符串'1'是相同,这种方法不适合字符串和数字混合的去重)

var arr = [1, 2, 3, 4, 5, 6, 2, 1, 3, 4, 2, 1, 5];
function unique(arr) {
    //定一个空数组(也是去重后返回的结果数组)
    var result=[];
    //定义一个空对象
    var obj={};
    for(var i=0,len=arr.length;i<len;i++){
        // 如果键对应的值,为真,意味着对象的键中已经有重复的键了,
        // 相反如果对象中没有这个键,则将这个元素放入结果数组中去。
        if(!obj[arr[i]]){
            obj[arr[i]]=true;
            result.push(arr[i])
        }
    }
    return result
}
console.log(unique(arr))

第四种方式:利用filter和indexOf

var arr = [1, 2, 3, 4, 5, 6, 2, 1, 3, 4, 2, 1, 5];
function unique(arr) {
    return result=arr.filter((item,index,array)=>{
        // 只返回那些索引等于当前元素索引的值
        return arr.indexOf(item)===index
    })
}
console.log(unique(arr))

第五种方式:利用ES6新的数据结构Set(Set里面的成员的值都是唯一的,没有重复的值)

var arr = [1, 2, 3, 4, 5, 6, 2, 1, 3, 4, 2, 1, 5];
function unique(arr) {
    //Array.from方法可以将Set结构转为数组
    return Array.from(new Set(arr));
    //不使用Array.from;也可以使用下面的方式
    // return [...new Set(arr)]
}
console.log(unique(arr))

第六种方式:利用ES6新的数据结构Map(通过 has 和 set 方法就能对数组进行去重)

var arr = [1, 2, 3, 4, 5, 6, 2, 1, 3, 4, 2, 1, 5];
function unique(arr) {
    var m=new Map();
    return result=arr.filter(val=>{
        //判断Map里面是否存在;如果不存在,将当前值set到map中去,并返回
        return !m.has(val) && m.set(val,true)
    })
}
console.log(unique(arr))

总结:以上就是我总结的对数组进行去重的方法,希望能够帮助到大家

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值