js数组练习(重组)

js数组的去重组练习,给出一个数组,把里面重复的元素去除,留下所有不重复的元素

var   arr  = [1,2,4,1,3,4,5];

分析:

1241345

如果我们不用编程采用基本的算法思想我们该会怎么处理呢

可能会想到这样吧    

1241345

                     1      把第一位拿出来与第二位(含第二位)后面依次比较,重复的去除

               

1241345

                      2          把第二位拿出来与第三位(含第三位)后面的比,去除重复

1241345

                       4    把第三位拿出来与第四位(含第四位)后面的比,去除重复

 

                     ..................................后面的同理,依次提取数据与该数据后面的元素对比,去除

       

              有了基本的思想我们来敲代码实现一下吧

 

  //去除数组中重复的数字
          var   arr  = [1,2,4,1,3,4,5];
           
          //for循环遍历数组把每一位元素取出来
          for(var i=0;i<arr.length;i++){
               console.log(arr[i]);
              
               //再次for循环  遍历出当前i后面的所有元素除了(i)
                 
               for(j=i+1;j<arr.length;j++){
                   console.log('------>'+arr[j]);
               }

          }

 先把基本的思想代码实现一下

 

看下控制台效果吧

 可以发现我们把数组arr[i]中每个元素遍历出来了,并且输出了每个i元素后的数据

如: 当 i=1;     他后面的元素  j为: 2,4,1,3,4,5

把数组arr[i]的元素遍历出来之后,当i=0,1,2,3,4,5,6时,随之它后面的数据(除i本身)以arr[j]数组的形式遍历出来了 ,这样我们就可以拿着arr[i]的数据与arr[j](i,后面的每个元素)与之对比,去掉arr[j]中重复的数据了,就基本实现了效果 

 

看下代码实现吧

 var   arr  = [1,2,4,1,3,4,5];
           
          //for循环遍历数组把每一位元素取出来
          for(var i=0;i<arr.length;i++){
               console.log(arr[i]);
              
               //再次for循环  遍历出当前i后面的所有元素除了(i)
                 
               for(j=i+1;j<arr.length;j++){
                   console.log('------>'+arr[j]);
                    
                   //如果相等证明出现了重复的元素
                   if(arr[i] == arr[j]){
                       arr.splice(j,1)
                       
                   }

               }

          }
          console.log(arr);

 

 这里说明一下这个splice方法吧
第一个参数一般为要操作项目对应的数组下标,第二个参数为删除的数量,例如splice(2,0)表示什么也不做,splice(2,1 )表示删除一个数组下标为2的内容,splice(2,,2)表示从数组下标2对应的内容开始,删除两个,即删除下标为2 和下标为3的所对应的内容。

 看数组 1,2,3,4,5效果实现了,数组重组去重完成了。

 

 

 但是这串代码还有个bagel,就是当要去重组的数组中有连续两个相等数据(元素)时,/注意当删除了当前j所在的元素以后,后边的元素会自动补位,此时将不会比较这个元素(而这个连续的元素又是相同的,所以成了落网之鱼),          所以需要再比较一次j所在位置元素    我们只需要在内循环里面 加上 j--就可以完美的解决这个问题

 

 比如;bug  :   我们改了一下这个数组

var   arr  = [1,2,2,2,4,1,3,4,5];

控制台bug效果:

 

          我们可以这样解决:

 内循环中j--,j++就重复多比了一次,

 

完整代码:

 //去除数组中重复的数字
          var   arr  = [1,2,2,2,4,1,3,4,5];
           
          //for循环遍历数组把每一位元素取出来
          for(var i=0;i<arr.length;i++){
               console.log(arr[i]);
              
               //再次for循环  遍历出当前i后面的所有元素除了(i)
                 
               for(j=i+1;j<arr.length;j++){
                   console.log('------>'+arr[j]);
                    
                   //如果相等证明出现了重复的元素
                   if(arr[i] == arr[j]){
                       arr.splice(j,1)
                       j--;               //加上j--就好了,多比了一次
                   }
                 

               }

          }
          console.log(arr);

 

 效果再次实现:

 

 一起学习吧,错误之处,指正哦。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值