数组去重更多信息

124 阅读1分钟

数组去重方法

1、for循环+findIndex

主要利用findIndex的特性,查找元素找不到返回-1,如果是-1就说明没找到,就往数组里添加新元素。

  const arr = [1,2,3,4,5,6,4,3,8,1]
  let newArr = []
  function newArrFn (arr) {
    for(let i = 0;i<arr.length;i++){
      newArr.indexOf(arr[i]) == -1?newArr.push(arr[i]):newArr
    }
    return newArr
  }
  console.log(newArr(arr))                 //[1,2,3,4,5,6,8]
2、双重for循环
   const arr = [1,2,3,4,5,6,4,3,8,1]
   function newArrFn(arr) {
     let newArr = []
     for(let i = 0;i<arr.length;i++){
       const flag = true;
       for(let j=0;j<newArr.length;j++){
         arr[i] === newArr[j] ? flag = false : flag
       };
       flag?newArr.push(arr[i]):newArr
     }
     return newArr
   }
    console.log(newArr(arr))                 //[1,2,3,4,5,6,8]
   
3、sort排序

首先利用sort方法进行排序循环,如果原数组的第i项和新数组的i-1项不一致,就push进去。

  const arr = [1,2,3,4,5,6,4,3,8,1]
  function newArrFn(arr){
    arr = arr.sort()
    let newArr = []
    for(let i = 0;i<arr.length;i++){
       arr[i] === arr[i-1] ? newArr:newArr(arr[i])
    }
    return newArr
  }
  console.log(newArr(arr))                 //[1,2,3,4,5,6,8]
4、Set

Set最大的特点是数据不重复。set函数可以接受一个数组作为参数来初始化,利用该特性给数组去重。

  const arr = [1,2,3,4,5,6,4,3,8,1]
  function newArr(arr){
     return ([...new Set(arr)])
  }
  console.log(newArr(arr))                 //[1,2,3,4,5,6,8]
5、set+Array.from
  const arr = [1,2,3,4,5,6,4,3,8,1]
  function newArr(arr){
     return(Array.from(new Set(arr)))
  }
  console.log(newArr(arr))                 //[1,2,3,4,5,6,8]
6、filter+indexOf

indexOf可以检测一个元素在数组中出现的位置,找到返回该元素的下标,找不到返回-1

  const arr = [1,2,3,4,5,6,4,3,8,1]
  fuction newArr(arr){
    return arr.filter((item,index){
      return arr.indexOf(item) === index
    })
  }
  console.log(newArr(arr))                 //[1,2,3,4,5,6,8]

filter用于对数组进行过滤。他创建一个新数组,新数组中的元素通过检查指定数组中符合条件的所有元素。 filter()不会对空数组进行检测,不改变原数组。

Array.filtrt(function(currentValue,index,arr),thisValue)

  const nums = [1,2,3,4,5,6,7,8,9,10];
  const res = nums.filter(num=>{
     return num > 5;
  })
  console.log(res);        //[6,7,8,9,10]
7、includes

利用includes检查新数组是否包含原数组的每一项。如果不包含就push进去

  const arr = [1,2,3,4,5,6,4,3,8,1]
  function newArrFn(arr){
    let newArr = []
    for(let i = 0;i<arr.length;i++){
       newArr.includes(arr[i]) ? newArr : newArr.push(arr[i])
    }
    return newArr
  }
  console.log(newArr(arr))                 //[1,2,3,4,5,6,8]
8、for+object

利用对象属性名不能重复这一特点。如果对象不存在,就push进去

  const arr = [1,2,3,4,5,6,4,3,8,1]
  const newArr = []
  function newArrFn(arr){
    const obj = {}
    for(let i = 0;i<arr.length;i++){
      if(!obj[arr[i]]) {
        newArr.push(arr[i])
        obj[arr[i]] = 1;
      } else {
        obj[arr[i]] ++
      }
    }
    return newArr
  }
  console.log(newArr(arr))                 //[1,2,3,4,5,6,8]
  
9、for+splice
  const arr = [1,2,3,4,5,6,4,3,8,1]
  function newArrFn(arr){
    for(let i = 0;i<arr.length;i++){  
       for(let j = 0;j<arr.length;j++){
         if(arr[i] === arr[j]){
           arr.splice(j,1)
           j--
         }
       }
    }
    return arr
  }
  console.log(newArr(arr))                 //[1,2,3,4,5,6,8]