首页 > 技术文章 > JavaScript--数组去重

zaishiyu 2020-11-03 17:16 原文

image
数组去重

  1. 通过es6的集合对象Set来实现去重

    <pre>let arr=[1,2,3,4,5,6,1,2,3];
       function unique(arr){
           return Array.from(new Set(arr))
       };
       console.log(unique(arr));
    <pre>
    

    Set对象是一组不重复的值,重复的值会被忽略,new Set(arr)得到Set(6)[1,2,3,4,5,6]

    数组的from方法用于通过拥有 length 属性的对象或可迭代的对象来返回一个数组。如果对象是数组返回 true,否则返回 false。
    from方法有三个参数,第一个参数为需要转化的对象,第二个参数是每个元素调用的函数,第三个参数指定第二个元素函数的this对象,Array.from('123',x=>x*10) ==> Array(3)[10,20,30]
    高级点写法:return [...new Set(arr)]

  2. 通过es5常用的嵌套for循环实现,i,j两个指针分别指向两个值,首先取得数组的第一个值arr[i],然后从数组第二个值开始遍历arr[j],如果遇到相等的数值,说明这两个值重复,然后数组的splice方法删除遇到的相等的值,同时把j指针后退1位,因为删除了元素后,再次遍历的值应该还是在该位置,直到完成循环。

    function unique(arr){
               for (let i = 0; i < arr.length; i++) {
                   for (let j = i+1; j < arr.length; j++) {
                       if(arr[i]==arr[j]){
                           arr.splice(j,1)
                           j--
                       }  
                   }
               }
               return arr
           }
           console.log(unique(arr))
       

    splice方法用于添加或删除数组中的元素。
    splice()有三个参数,第一个参数为必需,该参数必须是数字,表示删除或者添加元素的下标,第二个参数是删除元素的个数,第三个以及之后为添加的元素

  3. 首先定义一个空数组,遍历需要去重的数组,每一项和空数组中的元素对比,如果存在,就继续遍历,不存在就放入到定义的数组

       function unique(arr){
         let array=[]
         for (let i = 0; i < arr.length; i++) {
             if(array.indexOf(arr[i])=== -1){
                 array.push(arr[i])
             }
         }
         return array
     }
     console.log(unique(arr))
       

    indexOf()返回数组中指定元素的下标,如果数组中不存在就返回-1,第一个参数为查找的元素,第二个参数规定开始索引的位置,它的合法取值是 0 到 stringObject.length - 1

  4. 利用filter()方法创建一个新数组,数组中的元素是对指定数组中进行判断符合条件的项,

    function unique(arr){
         return arr.filter(function(item,index,arr){
             return arr.indexOf(item,0)===index
         })
     }
     console.log(unique(arr))
       

    array.filter(function(currentValue,index,arr), thisValue)
    filter()有两个参数,第一个参数为对指定数组判断的条件,函数,指定数组中的每一项都必须执行该函数,currentValue(必须。当前元素的值),第二个参数thisValue,可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue ,"this" 的值为 "undefined"
    当前元素的下标等于arr.indexOf(item,0)时,返回该元素,若不相等,说明该元素重复,不用返回。

推荐阅读