js数组去重的三种方法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>



  <script>
    // 数组去重
    var arr = [1, 2, 1, 3, 4, 5, 6, 4, 5, 3, 2, 1, 2, 3, 4, 5, 6]

    // 方法1:
    //   借助一个新的数组
    // var newArr = []

    // 遍历原始数组
    // for (var i = 0; i < arr.length; i++) {
    //   // arr[i] 就是数组中的每一个
    //   // console.log(arr[i])

    //   // 把数组中的每一个都添加到新的数组里面
    //   // 但是不是全添加,新数组中没有的我才添加,如果新数组中有,我就不添加了

    //   // 判断新数组中没有我
    //   if (newArr.indexOf(arr[i]) === -1) {
    //     newArr.push(arr[i])
    //   }
    // }

    /*
      i === 0     newArr.indexOf(arr[0]) === -1     newArr.push(arr[0])
      i === 1     newArr.indexOf(arr[1]) === -1     newArr.push(arr[1])
      i === 2     newArr.indexOf(arr[2]) === -1
      i === 3     newArr.indexOf(arr[3]) === -1     newArr.push(arr[3])
    */

    // console.log(newArr)

    // 方法2: 先排序,如果前一个和后一个一样,随便干掉一个
    arr.sort(function (a, b) { return a - b })

    for (var i = 0; i < arr.length; i++) {
      if (arr[i] === arr[i + 1]) {
        arr.splice(i, 1)
        i--  
 //由于数组的塌陷,当删除一个元素时,另外一些元素的索引值会发生改变,故每删除一个就要要减一,保持对应
      }
    }

    console.log(arr)


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

    /*
      i === 0  arr2 === [2, 3, 4]  len === 3
      i === 1  arr2 === [2, 4]     len === 2
      i === 2  结束循环
    */

    /*
      i === 0  arr2 === [2, 3, 4]  len === 3  i === -1
      i === 0  arr2 === [3, 4]     len === 2  i === -1
      i === 0  arr2 === [4]        len === 1  i === -1
      i === 0  arr2 === []         len === 0  i === -1
      i === 0  结束循环

    */
    // for (var i = 0; i < arr2.length; i++) {
    //   arr2.splice(i, 1)

    //   //
    //   i--
    // }

    // console.log(arr2)
 
   
  //方法3: ES6的Set数据类型
        const s = new Set(arr)
        const newArr = [...s]
        console.log(newArr)

  </script>
</body>
</html>
posted @ 2020-10-09 19:12  孙淡策  阅读(551)  评论(0)    收藏  举报