最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

2011 3 28怎样高效的批量删除JAVASCRIPT 数组中的元素?

来源:动视网 责编:小OO 时间:2025-10-03 04:18:41
文档

2011 3 28怎样高效的批量删除JAVASCRIPT 数组中的元素?

2011-3-28怎样高效的批量删除javascript数组中的元素?通常我们需要删除数据中特定元素,这个我个人比较喜欢用Array.splice(beginIndex,deleteCount,[,itemToAdd,..])。这个方法的第一个参数是在哪个下标元素开始操作。第二个参数是需要删除的元素的个数。后面的参数任意个,是需要在beginIndex出添加的元素。如果要批量删除数组元素的话,可得注意一个地方了。先看看下面的例子:vararr=["a//本来想删除efarr.splice(4,
推荐度:
导读2011-3-28怎样高效的批量删除javascript数组中的元素?通常我们需要删除数据中特定元素,这个我个人比较喜欢用Array.splice(beginIndex,deleteCount,[,itemToAdd,..])。这个方法的第一个参数是在哪个下标元素开始操作。第二个参数是需要删除的元素的个数。后面的参数任意个,是需要在beginIndex出添加的元素。如果要批量删除数组元素的话,可得注意一个地方了。先看看下面的例子:vararr=["a//本来想删除efarr.splice(4,
2011-3-28

怎样高效的批量删除javascript数组中的元素?

通常我们需要删除数据中特定元素,这个我个人比较喜欢用

Array.splice(beginIndex,deleteCount,[,itemToAdd,..])。这个方法的第一个参数是在哪个下标元素开始操作。第二个参数是需要删除的元素的个数。后面的参数任意个,是需要在beginIndex出添加的元素。

如果要批量删除数组元素的话,可得注意一个地方了。先看看下面的例子:

var arr=["a

//本来想删除e f

arr.splice(4,1);

arr.splice(5,1);//这时候数组长度是5。想删除第六个元素当然是不可能的

alert(arr);//a,b,c,d,e f没有删掉

也就是在批量删除的时候,其实数组长度也在发生变化。几番调试纠结之后,发现如果从一个数组元素的后面删除到前面,这样不管长度怎么变化都没有关系了。

var arr=["a

var toDeleteIndexes=[5,3,1];

for(var i=0;iarr.splice(toDeleteIndexes[i],1);

}

alert(arr);//a,c,e works

事实上上面的toDeleteIndexes并不是规规矩矩的排序的,于是首先想到是不是可以先将toDeleteIndexes排序了?下面是方法一

function removeBatch2(arr,toDeleteIndexes){

toDeleteIndexes.sort();//按大到小排列

for(var i=toDeleteIndexes.length-1;i>=0;i --){

arr.splice(toDeleteIndexes[i],1);

}

return arr;

}

var arr=["a

//删除a数组中下表为5,1,3的数组

alert(removeBatch2(arr,toDeleteIndexes));

上面的函数能批量删除元素,下面这种方法(方法二)也可行:

//批量删除指定下标的数据元素

function removeBatch(arr,toDeleteIndexes){

var result=[];

for(var i=0;ivar o=arr[i];

var needDelete=false;

for(var j=0;j++){

if(i==toDeleteIndexes[j]){needDelete= true;break;}

}

if(!needDelete){

result.push(arr[i]);

}

}

return result;

}

var arr=["a

var toDeleteIndexes=[5,1,3];

//删除a数组中下表为5,1,3的数组

alert(removeBatch(arr,toDeleteIndexes));

这种方法是一种典型的用空间复杂度换取时间复杂度。这两种方法究竟孰优孰劣,可以简单的计算一下循环次数。(n代表arr长度,m代表toDeleteIndexes长度)

方法一的运算次数:通常sort最多是n*(n-1)/2次。后面循环了m*(n*(n-1)/2)。splice应该也循环了begin次数。所以总的运算次数应该是(m+1)*n*(n-1)/2

方法二的运算次数:n*m/2for(var j=0;jj++){if(i==toDeleteIndexes[j]){needDelete=true;break;}算m/2次。

方法二需要重新申明一个数组,占内存应该会大些。

关于算法方面的结论,都是估算,还请读者指点。

总的来说,对于有确定的排序下标的批量删除,速度是最快的,不需要对下标排序。大家有更好的方法,欢迎交流。

var arr=[’a',’b',’c'];

若要删除其中的’b',有两种方法:

1.delete方法:delete arr[1]

这种方式数组长度不变,此时arr[1]变为undefined了,但是也有好处原来数组的索引也保持不变,此时要遍历数组元素可以才用

for(index in arr)

document.write(’arr[’+index+’]=’+arr[index]);

这种遍历方式跳过其中undefined的元素

*该方式IE4.o以后都支持了

2.数组对象splice方法:arr.splice(1,1);

这种方式数组长度相应改变,但是原来的数组索引也相应改变

splice参数中第一个1,是删除的起始索引(从0算起),在此是数组第二个元素

第二个1,是删除元素的个数,在此只删除一个元素,即’b';

此时遍历数组元素可以用普通遍历数组的方式,比如for,因为删除的元素在

数组中并不保留

*该方法IE5.5以后才支持

值得一提的是splice方法在删除数组元素的同时,还可以新增入数组元素

比如arr.splice(1,1,’d',’e'),d,e两个元素就被加入数组arr了

结果数组变成arr:’a',’d',’e',’c’

----------------------------------------------------------------------------------------------

Javascript删除数组元素(附VbScript)

javascript通过设置数组的length属性来截断数组是惟一一种缩短数组长度的方法.如果使用delete运算符来删除数组中元素,虽然那个元素变成未定义的,但是数组的length属性并不改变两种删除元素,数组长度也改变的方法.

*方法:Array.remove(dx)

*功能:删除数组元素.

文档

2011 3 28怎样高效的批量删除JAVASCRIPT 数组中的元素?

2011-3-28怎样高效的批量删除javascript数组中的元素?通常我们需要删除数据中特定元素,这个我个人比较喜欢用Array.splice(beginIndex,deleteCount,[,itemToAdd,..])。这个方法的第一个参数是在哪个下标元素开始操作。第二个参数是需要删除的元素的个数。后面的参数任意个,是需要在beginIndex出添加的元素。如果要批量删除数组元素的话,可得注意一个地方了。先看看下面的例子:vararr=["a//本来想删除efarr.splice(4,
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top