日期:2014-05-16  浏览次数:20485 次

一个js数组删除的问题
var arr = [ " a " , " b " , " c " , " d " , " e " , " f " ];
  var toDeleteIndexes = [ 5 , 3 , 1 ];
  for ( var i = 0 ;i < toDeleteIndexes.length ; i ++ ){
  arr.splice(toDeleteIndexes[i], 1 );
  }
  alert(arr); // a,c,e 
如上如果是从大到小删除就没问题 
var arr = [ " a " , " b " , " c " , " d " , " e " , " f " ];
  var toDeleteIndexes = [ 5 , 3 , 4 ];
  for ( var i = 0 ;i < toDeleteIndexes.length ; i ++ ){
  arr.splice(toDeleteIndexes[i], 1 );
  }
  alert(arr); // a,b,c,e
 求解释 为什么安数组下标从大到小删除就没问题 ?

------解决方案--------------------
看了下这两段代码
第一段代码
第一次删除数组下标为5的项,数组容量变为5
第二次删除数组下标为3的项,数组容量变为4
第三次删除数组下标为1的项,数组容量变为3
所以删除没问题
第二段代码
数组下标为3的项删除后,数组的容量变为4了,不再存在下标为4的项,
所以删除出问题。
------解决方案--------------------
从大到小删,删除后面大的,对前面的剩余元素的下标没影响。
如果如果次序乱的,就有可能删除了前面的元素后,后面大下标元素的下标就有变化了。