JS的数组去重 看了就会

104 阅读1分钟

数组去重,面试常问

1.使用Es6 set方法 [... new Set(arr)]

let arr = [2,3,4,5,3,2,6,7,6,8]
let res = (arr) =>[...new Set(arr)]
res(arr) // 输出结果[2, 3, 4, 5, 6, 7, 8]

2.for 双重循环

    let arr = [2,3,4,5,3,2,6,7,6,8]
    
    function unique(arr){
    let res = []
    for(let i = 0;i<arr.length;i++){
     for(var j = 0;j<res.length;j++){
      if(arr[i] ===res[j] ){
        break
      }
     }
     if(j== res.length){
      res.push(arr[i])
     }
    };
    return res
    }
    console.log(unique(arr));

3.利用 indexOf()方法可返回某个指定的元素在数组中首次出现的位置,没有则返回-1

    let arr = [2,3,4,5,3,2,6,7,6,8]
    
    function unique(arr){
    let res = []
     for(let i = 0;i<arr.length;i++){
       if(res.indexOf(arr[i])=== -1) {
        res.push(arr[i])
      }
     };
    return res 
   }
    console.log(unique(arr)); // [2, 3, 4, 5, 6, 7, 8]

4.利用for嵌套for 然后splice去重

let arr = [2,3,4,5,3,2,6,7,6,8]
  function unique(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);
             j--;
           }
      }
   }
  return arr;
}
  console.log(unique(arr)); // [2, 3, 4, 5, 6, 7, 8]

5.利用filter

let arr = [2,3,4,5,3,2,6,7,6,8]
let res = arr =>{
return arr.filter((item,index)=>{
return arr.indexOf(item) === index
})
}
console.log(res(arr)); // [2, 3, 4, 5, 6, 7, 8]

6.利用Map数据结构去重

let arr = [2,3,4,5,3,2,6,7,6,8]
let unique = arr =>{
  let res =new Map()
  return arr.filter(item =>{
    return !res.has(item)&& res.set(item,1)
  })
}
console.log(unique(arr));  // [2, 3, 4, 5, 6, 7, 8]

总结:数组里常用的几个方法

  • map() 映射数组,对数组每一个元素进行映射处理 得到一个全新的数组

     * 特点: 1.回调执行次数==数组长度 
             2.本身返回值:映射之后的新数组 
             3.回调函数内部return 映射之后的值
    
  • filter() return true 满足筛选条件 放入新数组中1.找出return true 满足筛选条件 放入新数组中数组中符合条件的元素 2.找出对象数组中符合条件的元素

    *return true 满足筛选条件 放入新数组中
    *return false 不满足筛选条件 不放入新数组中
    
  • splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目