[陣列]在巡覽中刪除陣列/集合中的項目
突然想到這一個以前遇到的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,
也許有更好的解決, 如果您有的話, 給個建議吧