作家
登录
    用户名:  密码:   

JScript内置对象Array中元素的删除方法

作者: 来源:www.28hudong.com 2013-03-30 03:39:31 阅读34次 我要评论

我们知道JScript给我们提供了一个内置的数组对象Array。Array对象除了提供了constructor、length和prototype外,还默认提供了13个方法:concat、join、pop、push、reverse、shift、slice、sort、splice、toLocaleString、toString 、unshift和valueOf,可是没有提供delete方法。 要是熟悉JavaScript的话,会马上说,系统提供了一个delete操作,可以用来删除数组中的元素。对,JS系统里确实有一个delete可以删除数组中的元素。可是这个删除很难用,它确实可以删除元素,可是它却不更新Array对象的元素计数器。例如我们执行: var ary = ['a', 'b', 'c']; delete ary[1]; 如果正确的执行删除后,我们希望会得到一个新的数组,他有两个元素['a', 'c'],长度为2。可是执行完后我们确实是得到了两个元素['a', 'c']的数组,可是这个新数组的长度ary.length居然还是3!。同时我们执行ary.toString()将得到"a,,c",这也表明数组的计数器还是3,因为Array的toString()实际上执行的是Array.join(',')。 这样的删除在我们使用for( ; ; )遍历数组的时候,将会非常的郁闷,我们可能很容易就可能被一个undefined的值搞死掉了。那么怎么才能获得删除数组元素后同步数组的大小呢?由于Array本身提供的pop和shift两个函数可以"真正的"删除数组的元素,所以我们可以使用它们来自己扩充一个remove函数。 但是pop和shift只能从数组的两端删掉元素,所以我们在删除之前需要对数组做一些整理,实现remove方法的代码如下: Array.prototype.remove = function(obj) { for ( var i=0 ; i < this.length ; ++i ) { if ( this[i] == obj ) { if ( i > this.length/2 ) { for ( var j=i ; j < this.length-1 ; ++j ) { this[j] = this[j+1]; } this.pop(); } else { for ( var j=i ; j > 0 ; --j ) { this[j] = this[j-1]; } this.shift(); } break; } } }; 移动整理数组的目的只是为了删除元素后不改变剩余元素的彼此相对位置,否则只用把需要删除的元素swap到两端pop或shift以下就可以了。

  推荐阅读

  关于使用runtimeStyle属性问题讨论文章

当我们在IE中使用IE提供的DOM时,我们会发现关于style的相关属性有三个分组,它们分别是style、runtimeStyle和currentStyle。关于这个三种style的作用和基本用途,我曾经在这篇文章中有讲过,但随着越来越深入的使>>>详细阅读


本文标题:JScript内置对象Array中元素的删除方法

地址:http://www.17bianji.com/kaifa2/JS/30804.html

18

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

34

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)