[陣列]在巡覽中刪除陣列/集合中的項目

[陣列]在巡覽中刪除陣列/集合中的項目

突然想到這一個以前遇到的bug

   1:  function test01(){
   2:      var v=[3,6,9,2,4,6,4,8,12];  
   3:      for(var i=0;i<v.length;i++)
   4:      { 
   5:          if(v[i]%3==0) 
   6:              v.splice(i,1);     
   7:      }
   8:      for(var i=0;i<v.length;i++)
   9:      {
  10:          document.write(v[i] + ",");
  11:      }
  12:      document.write("<br />");
  13:  }

結果=6,2,4,4,8,

與我們預期的將能整除 3 的值移除相差很遠,

這個案例用JavaScript實作, 所以沒有出Exception, 但有些語言的集合物件是直接送你Exception,

解決的方法我是用另外一個陣列集中欲刪除的位置, 然後再跑一次迴圈將其刪除.

 

如下:

   1:      var v=[3,6,9,2,4,6,4,8,12]; 
   2:      var v2del = [];
   3:      for(var i=0;i<v.length;i++)
   4:      { 
   5:          if(v[i]%3==0) 
   6:              v2del.push(i); 
   7:      }
   8:      for(var i=v2del.length-1;i>-1;i--)
   9:      {
  10:          v.splice(v2del[i],1);     
  11:      }
  12:      for(var i=0;i<v.length;i++)
  13:      {
  14:          document.write(v[i] + ",");
  15:      }
  16:      document.write("<br />");

 

結果=2,4,4,8,

也許有更好的解決, 如果您有的話, 給個建議吧