陣列去重

隨便啦_發表於2019-02-28

陣列去重方法一

<script>
    // 把陣列中重複項去掉
    // [1, 2, 3]

    // indexOf

    // [1, 2, 3]
    // 定義一個新陣列 var newArr = []
    // 迴圈arr裡面的每一項 var item = arr[i]
    // 判斷新陣列中是否已經存在 item newArr.indexOf(item) === -1
    // 如果不存在 再往裡面新增  newArr.push(item)

    var arr = [1, 1, 1, 2, 3, 2, 3, 2, 3, 4, 4, 4]
    var arr2 = [10, 10, 10, 2, 3, 2, 3, 2, 3, 4, 4, 4]
    var arr3 = [100, 100, 100, 2, 3, 2, 3, 2, 3, 4, 4, 4]

    // 一次封裝 多次複用
    // 想給誰去重 就把誰當做實參傳遞進來unique(arr) 用形參變數ary接收
    function unique(ary) {
      var newArr = []
      for (var i = 0; i < ary.length; i++) {
        var item = ary[i]
        if (newArr.indexOf(item) === -1) {
          newArr.push(item)
        }
      }
      return newArr
    }

   var a1 = unique(arr)
   console.log('a1', a1)

   var a2 = unique(arr2)
   console.log('a2', a2)


    // var newArr = []
    // for (var i = 0; i < arr.length; i++) {
    //   var item = arr[i] // 1 1 1 2

    //   // [1].indexOf(1) 0 === -1
    //   // [1].indexOf(2) -1 === -1
    //   if (newArr.indexOf(item) === -1) {
    //     newArr.push(item) // [1, 2]
    //   }
    // }

    // console.log(newArr)
  </script>
複製程式碼

陣列去重方法二

 <script>
   var arr = [1, 1, 2, 2, 3, 2, 3, 4, 4, 4]

   function unique(ary) {
     var newArr = []
     var obj = {}

     for (var i = 0; i < ary.length; i++) {
       var cur = ary[i]

       if (!obj[cur]) {
         newArr.push(cur)
         obj[cur] = true
       }

     }

     obj = null
     return newArr
   }

   var ary = unique(arr)
   console.log('ary', ary)


   //  var newArr = []
   //  var obj = {}

   //  for (var i = 0; i < arr.length; i++) {
   //    var cur = arr[i] // 1 1 2 2

   //   // 如果物件中不存在這個屬性 說明我們沒有新增過
   //   // !obj[1] => !true => false
   //   // !obj[2] => !undefined => true
   //   // !obj[2] => !true => false
   //    if (!obj[cur]) { 
   //      newArr.push(cur) // [1, 2]
   //      obj[cur] = true // {1: true, 2: true}
   //    }

   //  }
   //  console.log(newArr)

   //  // 由於這個物件沒用了 通常我們會 釋放記憶體
   //  obj = null
 </script>
複製程式碼

雙重迴圈去重

<script>
   // 外層迴圈出來每一個當前項cur, 內層迴圈迴圈出來當前項的每個後一項last

   // 用當前項cur和 每個後一項last 分別比較===
   // 如果有相同的(===) 就刪除這一項 splice(j, 1)

   // var arr = [1, 1, 2, 2, 3, 2, 3, 4, 4, 4]

   // var arr = [1, 1, 1, 1]

   // cur = 1 (a)
   // // 內層迴圈 j = 0 + 1
   // last = 1 (b)

   // if cur === last
   // arr.splice(j, 1)
   // // [1, 1, 1] 

   // j++ // j = 2

   // // [1, 1, 1] 
   // // 內層迴圈第二次 j = 2
   // cur = 1 (0)
   // last = 1 (2)

   // if cur === last
   // arr.splice(j, 1)
   // // [1, 1] 

   // j++ // j = 3

   // 3 < 2 
   


  

   // 當我們用splice刪除前面某一項時候 後面的就會往前挪一位,陣列塌陷

   // 用於我們再刪除的時候 後面的會往前挪一位
   // 我們需要再刪除的時候 讓我們再從當前這個索引位置比較一次

   // j = 1
   // var arr = [2, 2, 2, 2]
   // j = 1
   // j++ j = 2

   // for (var i = 0; i < arr.length - 1; i++) {
   //   // 當前項 i當前項索引
   //   var cur = arr[i]
   //   console.log('大迴圈cur', cur)
     
   //   // 把當前項cur的後一項依次取出來進行比較
   //   for (var j = i + 1; j < arr.length; j++) {
   //     var last = arr[j]

   //     // 陣列中有和當前項 重複的值
   //     if (cur === last) {
   //       arr.splice(j, 1)
   //       j--
   //     }
   //   }
   // }



   // i++
   // i= i + 1
   //程式碼執行
   var arr = [2, 2, 2, 2]

   for (var i = 0; i < arr.length - 1; i++) {
     // 當前項 i當前項索引
     var cur = arr[i]
     console.log(i)
     console.log('大迴圈cur', cur)
     
     // 把當前項cur的後一項依次取出來進行比較
     for (var j = i + 1; j < arr.length;) {
       var last = arr[j]

       // 陣列中有和當前項 重複的值 就刪除這一項
       cur === last ? arr.splice(j, 1) : j++
       // if (cur === last) {
       //   arr.splice(j, 1)
       // } else {
       //   j++
       // }
     }
   }
   console.log(arr)

   for (var i = 0; i < arr.length - 1; i++) {
     var cur = arr[i]
   
     for (var j = i + 1; j < arr.length;) {
       cur === arr[j] ? arr.splice(j, 1) : j++
     }
   }
 </script>
複製程式碼

相關文章