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

2016-02-19 10:28 11 1 收藏

今天图老师小编给大家介绍下JScript内置对象Array中元素的删除方法,平时喜欢JScript内置对象Array中元素的删除方法的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - Web开发 】

我们知道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以下就可以了。

来源:http://www.tulaoshi.com/n/20160219/1594749.html

延伸阅读
标签: PS PS教程
在软件UI设计、视频后期等需要团队协作的项目中,经常涉及到将Photoshop的元素导出的问题。比如项目较大时,会有成百上千的图层,又如设计IOS或者Android应用程序时,经常要将图像保存成几种不同的分辨率,Photoshop提供了多种方式让将导出流程精简化、自动化。 方法一:合并拷贝(Copy Merged) 将图像效果(如一个按钮设计)快速导出到另一个...
标签: ASP
  平常我们只听说过ADO等一类ASP对象,但在ASP中还有个鲜为人知的专门SQL Server的ASP访问对象,它就是SQLOLE.SQLServer对象。SQLOLE.SQLServer可以直接访问SQL Server的系统属性。以Set oSQLServer = CreateObject ("SQLOLE.SQLServer")语句将产生一个SQL Server服务器对象。 ---- 若要查看此服务器中数据库的集合,可用语句: For Ea...
标签: Web开发
Request和Response这两个对象是ASP所提供的内置对象中最常用的两个。在浏览器(或其他用户代理)和Web服务器之间,请求与响应中发生的信息交流可以通过ASP中的两个内置对象来进行访问和管理,这两个对象称为Request和Response对象。 在ASP页中所要进行的工作几乎都要访问这两个对象,使用这两个对象的方式将影响页面的效率及可靠性。...
中元节的风俗 中元节的禁忌 中元节的禁忌 在我国古代,相传在“中元节”(鬼节)这一天鬼门关大开,死去的人会来到人间游荡,因此活着的人在这一天要准备一些祭品拜祭冤魂。而自宋代延续至今,不同地方的中元节已然不再是统一的在农历7月15这一天,而是在7月11到7月15。而不同的地方却有着相同的鬼节禁忌。下文中...
标签: Web开发
在javascript中,我们有时候要使用delete删除对象。但是,对于delete的一些细节我们未必尽知。昨天,看到kangax分析delete的文章,获益匪浅。本文将文章的精华部分翻译出来,与各位分享。 原理代码类型 执行上下文 激活对象/可变对象 属性特性 内置对象和DontDelete 未声明的赋值 Firebug 困惑通过eval删除变量 浏览器兼容性Gecko DontDelet...

经验教程

335

收藏

69
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部