数组去重


在如今ES6普及的年代,数组去重变得简单了起来,我们可以用ES6的Set来实现数组去重:

    let arr = [1,2,3,4,5,6,1,233,5,4,2];
    let uniqueArr = [...new Set(arr)];
    //  [1, 2, 3, 4, 5, 6, 233]

不了解ES6的可以去看下阮老师的教程

但是,在不支持ES6的浏览器(这里不考虑polyfill以及Babel)上如何实现数组去重呢?常见的有一下几种方法:

1.数组遍历法
    let arr = [1,2,3,4,5,6,1,233,5,4,2,'1'];
    let uniqueArr = [];
    for(let i = 0; i < arr.length; i++){
        if(arr.lastIndexOf(arr[i])!==i) continue;
        uniqueArr.push(arr[i]);
    }
    //[3, 6, 1, 233, 5, 4, 2, "1"]
    //或者是
    let arr = [1,2,3,4,5,6,1,233,5,4,2,'1'];
    let uniqueArr = [];
    for(let i=0; i < arr.length; i++){
        if(uniqueArr.indexOf(arr[i]) === -1) uniqueArr.push(arr[i]); 
    }
    //[1, 2, 3, 4, 5, 6, 233, "1"]
2. 对象键值对法
    let arr = [1,2,3,4,5,6,1,233,5,4,2,'1'];
    let _obj = {},uniqueArr=[];
    for(let i = 0; i < arr.length; i++){
        let _type = typeof arr[i];
        if(!_obj[arr[i]]){
            _obj[arr[i]]=[_type];
            uniqueArr.push(arr[i]);
        }else if(_obj[arr[i]].indexOf(_type)){
            _obj[arr[i]].push(_type);
            uniqueArr.push(arr[i]);
        }
    }
    //[1, 2, 3, 4, 5, 6, 233, "1"]
3.相邻法(通过排序后来判断旁边的值是否相等)
    let arr = [1,2,3,4,5,6,1,233,5,4,2,'1'];
    let uniqueArr = [];
    arr.sort((a,b)=>a-b);
    for(let i = 0; i < arr.length; i++){
        if(arr[i]===arr[i+1]) continue;
        uniqueArr.push(arr[i]);
    }
    // [1, "1", 2, 3, 4, 5, 6, 233]
4. 这个是在国外的一个文章上看到的
    let arr = [1,2,3,4,5,6,1,233,5,4,2,'1'];
    let uniqueArr = [];
    for(let i = 0; i < arr.length; i++){
        for(let j = i + 1; j < arr.length; j++){
            if(arr[i]===arr[j]){
                j = ++i;
            }
        }
       uniqueArr.push(arr[i]);
    }
    //[3, 6, 1, 233, 5, 4, 2, "1"]
阅读:
610
评论:
0
转载:
0
时间:
2017-11-28 11:19

×你还没有登录,登陆后有更多特权喔!点我登录