算法:双for循环数组去重

2,735 阅读2分钟

双for循环数组去重,用了数组中的splice,有个数组去重

<!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 ary=[1,2,1,2,2,3,3,1,3,2,3];
    
   // var cur=ary[0]
   // console.log(cur); 数组中的第一项
   // 原数组    1,2,1,2,2,3,3,1,3,2,3
   // 当cur=1   1,2,2,2,3,3,3,2,3
   // 当cur=2   1,2,3,3,3,3
   // 当cur=3   1,2,3
   // 1,2,3

   // 双重循环去重
   // 每次循环从数组中取出一项(从第一项开始) 依次跟后面的每一项进行比较
   // 如果比较中有相同就将此时那一项删除掉

   // [1,2,1,2,2,3,3,1,3,2,3]
   // 第一次循环 i=0 cur=1  1,2,2,2,3,3,3,2,3
   // 第二次循环 i=1 cur=2  1,2,3,3,3,3
   // 第三次循环 i=2 cur=3  1,2,3

   // splice() 会导致数组塌陷

   var arr = [3, 1, 1, 2, 2, 2, 1, 1, 3, 3, 3]
   // 第一次循环的时候 i=0 cur=3  3, 1, 1, 2, 2, 2, 1, 1
   // 第二次循环的时候 i=1 cur=1  3, 1, 2, 2, 2
   // 第三次循环的时候 i=2 cur=2  3, 1, 2

   // 外层循环取出当前这一项 (用来比较的这一项)
   for(var i=0;i<arr.length;i++){
          var cur = arr[i]; //取出每一项 
       // console.log(cur); 外层循环最先取出的是3
       
       // 用来取出当前项后面的每一项(被比较每一项)
       for(var j=i+1;j<arr.length;j++){
          // 1===1 j=i+1=>j=1 arr[j]
             if(cur===arr[j]){
             arr.splice(j,1);//splice(和当前项重复的那项,1)
             j--;
          }
       }
   }
   console.log(arr);
    </script>
</body>
</html>

 //双for循环数组去重,如果当前项和后面被比较项不相等的话再j++
    var arr = [3, 1, 1, 2, 2, 2, 1, 1, 3, 3, 3]
    for(var i=0;i<arr.length;i++){
       var cur=arr[i];
       for(var j=i+1;j<arr.length;){
           if(cur===arr[j]){
              arr.splice(j,1)
           }else{
               j++
           }
       }
    }
    console.log(arr);