javascript之九种数组去重的方法

       数组去重,第一反应就是for循环,如果一个for循环解决不了,那就多来几个。。。哈哈,心血来潮查了下数组去重的方法,是我见识短浅。以下,我将介绍九种js中数组去重的方法:

  • 利用 ES6 Set去重
  • 利用splice()去重
  • 利用indexOf()去重
  •  利用sort()去重
  • 利用 对象的属性不能相同的特性进行数组去重
  • 利用includes() 
  • 利用hasOwnProperty()去重
  • 利用递归去重
  • 利用Map数据结构去重 

 利用ES6 Set()去重:

/*ES6 Set()方法数组去重*/
function unique(arr) {
    //from()是将Set()数据结构转换为数组类型
    //Set()数据结构类似于数组,但不同的是Set()成员值唯一
    return Array.from(new Set(arr));  
}
var arr =[1,1,2,3,4,4];
console.log(unique(arr));

       控制台输出结果如下:

   利用splice()去重:

function unique1(arr) {
    for(var i = 0; i < arr.length; i++){
        for(var j = i+1; j < arr.length; j++){
            if(arr[i]==arr[j]){
                arr.splice(j,1);    //splice(j,1, )替换的值是空
                j--;
            }
        }
    }
    return arr;
}
console.log(unique1(arr));

     输出结果和上例结果一致,在这里需要注意的是splice(),它的本质是splice(index,len,[item]),index是数组开始下标,len替换删除元素的长度,[item]替换的值。

     利用indexOf()去重:

function unique2(arr) {
    /* 思路:1,创建新的空数组;
    *        2,for循环遍历去重的数组;
    *        3,indexOf()查询遍历出的数组在新的数组是否出现,如果出现则继续遍历,如果未出现,则利用push方法添加到数组里*/
var arr1 = [];
for(var i = 0; i < arr.length; i++){
    if(arr1.indexOf(arr[i]) == -1){
        arr1.push(arr[i]);
    }
}
return arr1;
}
var array = [4,5,6,77,8,8,,77,5];
console.log(unique2(array));

    注:indexOf()返回值,如果匹配到返回1,未匹配到返回-1。

控制台输出:

    利用sort()去重:

/*利用sort()去重*/
function unique3(arr){
    arr = arr.sort();
    var array = [arr[0]];
    for(var i = 1; i < arr.length; i++){   //因为不是从第一个元素开始的,所以i的初始值不能为0.
        if(arr[i] !== arr[i-1]){
            array.push(arr[i]);
        }
    }
    return array;
}
var arr3 = [11,33,66,8,8,5,33,11];
console.log(unique3(arr3));

控制台输出结果:

    利用 对象的属性不能相同的特性进行数组去重:

/*利用 对象的属性不能相同的特性进行数组去重*/
function unique4(arr){
    var array = [];
    var obj = {};
    for(var i = 0; i < arr.length; i++){
        if(!obj[arr[i]]){
            array.push(arr[i]);
            obj[arr[i]] = 1;
        }else{
            obj[arr[i]]++;
        }
    }
    return array;
}
var arr4 = ['a','a','b','c','n','d','d','s','n'];
console.log(unique4(arr4));

     控制台输出结果:

     利用includes()去重:

/*利用includes()去重*/
function unique5(arr) {
    var array = [];
    for(var i = 0; i < arr.length; i++){
        if(!array.includes(arr[i])){
            array.push(arr[i]);
        }
    }
    return array;
}
var arr5 = [100,50,45,90,100,4,50];
console.log(unique5(arr5));

    控制台输出结果:

    利用hasOwnProperty()去重:

 /*利用hasOwnProperty()去重*/
 function unique6(arr) {
     /*hasOwnProperty去重:判断对象是否有某个特定的属性,必须用字符串指定该属性。*/
     var obj = {};
     /*filter()对数组中每个元素都执行一次指定的函数(callback()),并创建一个新的数组*/
     return arr.filter(function (item,index,arr) {return obj.hasOwnProperty(typeof item + item)?false:(obj[typeof item + item] = true)  })
//callback(当前元素,当前元素索引,当前元素数组对像)
 }
 var arr6 = [200,200,300,100,100,290,300];
 console.log(unique6(arr6));

    控制台输出结果:

    利用递归去重:

/*利用递归去重*/
function unique7(arr) {
    var arry = arr;
    var len = arry.length;
    arry.sort(function (a,b) {return a - b;})
    function loop(index){
        if(index >= 1){
            if(arry[index]===arry[index - 1]){
                arry.splice(index,1);
            }
            loop(index - 1);
        }
    }
    loop(len - 1);
    return arry;
}
var arr7 =[1,2,4,5,6,6,5,4,2];
console.log(unique7(arr7));

   控制台输出结果:

   利用Map数据结构去重:

/*利用map数据结构去重*/
function unique8(arr) {
    var map = new Map();
    var array = new Array();
    for(var i = 0; i < arr.length; i++){
        if(map.has(arr[i])){
            map.set(arr[i],true);
        }else{
            map.set(arr[i],false);
            array.push(arr[i]);
        }
    }
    return array;
}
var arr8 = [1,1,1,2,2,2,3,3,3];
console.log(unique8(arr8));

    控制台输出结果:

猜你喜欢

转载自blog.csdn.net/The_upside_of_down/article/details/82767166