记录数组去重的几种方法

1、双层循环去重

先定义原始数组第一个元素的数组,遍历原始数组,新数组与原始数组进行比较
如果不重复就添加到新数组中,最后返回新数组res

 let arr = [0,2,3,4,4,0,2];
   function unique1(ary) {
    let res = [ary[0]];
    for(let i=0;i<ary.length;i++){
        let flag = true;
        for(let j=0;j<res.length;j++){
            if(arr[i] === res[j]){
                flag = false;
                break;
            }
        }
        if(flag)res.push(arr[i]);
    }
    return res;
    
   }
   console.log(unique1(arr));
   //[0, 2, 3, 4]

 

2、使用indexOf方法去重

indexOf()方法可返回某个指定的元素在数组中首次出现的位置
首先定义一个空数组res,然后调用indexOf方法对原来的数组进行遍历判断,
如果元素不在res中,则将其push进res中,最后将res返回即可获得去重的数组

   let bosh = [1,2,3,3,2,1,1,2,3,4,5,6,7];
    function unique2(a){
        let temp = [];
        for(let i=0;i<a.length;i++){
            //如果没有找到首次出现的位置代表这个数不重复
            if(temp.indexOf(a[i]) === -1){
                temp.push(a[i]);
            }
        }
        return temp;
    }
    console.log(unique2(bosh));
    // [1, 2, 3, 4, 5, 6, 7]

 

3、相邻元素去重(排序后去重)

首先调用了数组的排序方法sort(),然后根据排序后的结果进行遍历及相邻元素对比
如果相等则跳过改元素,直到遍历结束

  let adjoin = [64,5,4,2,4,5,2];
    function unique3(arr){
        arr = arr.sort();
        let empt = [];
        for(let i=0;i<arr.length;i++){
            if(arr[i] !== arr[i-1]){
                empt.push(arr[i]);
            }
        }
        return empt;
    }
    console.log(unique3(adjoin));
    //[2, 4, 5, 64]

 

4、利用对象属性去重

创建空对象,遍历数组,将数组中的值设为对象的属性,并给该属性赋初始值1,每出现一次,对应的属性值增加1
这样,属性值对应的就是该元素出现的次数

 let sz = [6,20,0,20,9,6,0];
   function unique4(arr){
    let item = [];
    let obj = {};
    for(let i=0;i<arr.length;i++){
        if(!obj[arr[i]]){
            item.push(arr[i]);
            obj[arr[i]] = 1;
        }else{
            obj[arr[i]]++;
        }
    }
    return item;
   }
   console.log(unique4(sz));
 //[6, 20, 0, 9]

 

5、利用indexOf + filter

利用indexOf检测元素在数组中第一次出现的位置是否和元素现在的位置相等,如果不等则说明该元素是重复元素,然后把重复的元素过滤掉

  let filt = [0,99,33,22,0,44,33];
   function unique5(arr){
    return Array.prototype.filter.call(arr,function(item,index){
        return arr.indexOf(item) === index;
    });
   }
   console.log(unique5(filt));
   //[0, 99, 33, 22, 44]

 

6、使用es6中set与解构赋值去重

set的特性就是值是唯一的,不能重复

   let es = [1,2,2,3,4,1,3,5];
    function unique6(arr){
        return [...new Set(arr)]
    }
    console.log(unique6(es));
    //[1, 2, 3, 4, 5]

 

7、使用es6中set与Array.from去重

Array.from可以将类数组转为数组

  let array = [0,3,0,5,0,6,5];
    function unique7(arr){
        return Array.from(new Set(arr))
    }
    console.log(unique7(array));
    //[0, 3, 5, 6]

 

posted @ 2019-04-02 01:22  紫诺花开  阅读(553)  评论(0编辑  收藏  举报