數(shù)組去重
    1 雙層for循環(huán)(類似冒泡排序的雙層循環(huán)寫法)
var arr = [2,3,4,2,34,21,1,12,3,4,1] 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) } } }  
    - 
        1
    
 
    - 
        2
    
 
    - 
        3
    
 
    - 
        4
    
 
    - 
        5
    
 
    - 
        6
    
 
    - 
        7
    
 
    - 
        8
    
 
    - 
        9
    
 
    - 
        10
    
 
    - 
        11
    
 
    - 
        12
    
 
    2 循環(huán)和indexof、循環(huán)和includes
    創(chuàng)建新數(shù)組,循環(huán)舊數(shù)組,看每次循環(huán)的元素是否存在于新數(shù)組中沒有就把當(dāng)前元素添加到新數(shù)組中
 var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr2 = [] arr.forEach((e)=>{ if(arr2.indexOf(e)==-1){ arr2.push(e) } }) console.log(arr2)  
 var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr2 = [] arr.forEach((e)=>{ if(!arr2.includes(e)){ arr2.push(e) } }) console.log(arr2)  
    3 利用對(duì)象屬性不能重復(fù)去重
var arr = [2,3,4,2,34,21,1,12,3,4,1] var obj = {}; arr.forEach((e,i)=>{ obj[arr[i]] = "abc"; }); var arr2=Object.keys(obj) console.log(arr2)  var arr3 = arr2.map(e => ~~e )   
    
        ~是js里的按位取反操作符,~~就是執(zhí)行兩次按位取反,其實(shí)就是保持原值,但是注意雖然是原值,但是對(duì)布爾型變量執(zhí)行這個(gè)操作,會(huì)轉(zhuǎn)化成相應(yīng)的數(shù)值型變量,也就是 ~~true === 1,~~false === 0。
    
    4 ES6 Set
    ES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。
var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr1 = [...new Set(arr)] console.log(arr1)  
    5 ES6 Array. prototype.filter()
    
        注:indexOf在數(shù)組中找元素的時(shí)候,碰到符合條件的第一個(gè)就會(huì)把它的下標(biāo)返回
    
var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr2 = arr.filter((e,i)=>{  return arr.indexOf(e)==i; }) console.log(arr2)  
    6 ES6 Array. prototype.reduce()
var arr = [2,3,4,2,34,21,1,12,3,4,1] var arr2 = arr.reduce((pre,e)=>{  pre.includes(e)?pre:pre.push(e); return pre },[]) console.log(arr2)