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

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

时间: 2024-08-02 06:31:50

JScript内置对象Array中元素的删除方法_javascript技巧的相关文章

javascript 获取iframe里页面中元素值的方法_javascript技巧

IE方法:document.frames['myFrame'].document.getElementById('test').value; 火狐方法:document.getElementById('myFrame').contentWindow.document.getElementById('test').value; IE.火狐方法: 复制代码 代码如下:     function getValue(){          var tmp = '';          if(docume

asp内置对象 ObjectContext 事务管理 详解_应用技巧

asp内置对象 ObjectContext 详解 您可以使用 ObjectContext 对象提交或放弃一项由 Microsoft Transaction Server (MTS) 管理的事务,它由 ASP 页包含的脚本初始化.  ASP 包含 @TRANSACTION 指令时,该页会在事务中运行,直到事务成功或失败后才会终止.  语法 ObjectContext.method 方法 SetComplete SetComplete 方法声明脚本不了解事务未完成的原因.如果事务中的所有组件都调用 

JS 清除字符串数组中,重复元素的实现方法_javascript技巧

JS 清除字符串数组中,重复元素的实现方法 <script language="JavaScript"> <!-- var arrData=new Array(); for(var i=0; i<1000; i++) { arrData[arrData.length] = String.fromCharCode(Math.floor(Math.random()*26)+97); } //document.write(arrData+"<br/&g

JavaScript获取表单内所有元素值的方法_javascript技巧

本文实例讲述了JavaScript获取表单内所有元素值的方法.分享给大家供大家参考.具体如下: 下面的JS代码可以遍历指定表单中的所有元素,并输出元素的值 <!DOCTYPE html> <html> <body> <form id="frm1" action="form_action.aspx"> First name: <input type="text" name="fname

ES6中的数组扩展方法_javascript技巧

form 转化为真正的数组 先说一下使用场景,在Js中,我们要经常操作DOM,比如获取全部页面的input标签,并且找到类型为button的元素,然后给这个按钮注册一个点击事件,我们可能会这样操作: var inputObjs=document.getElementsByTagName('input'); for(var i=0;i<inputObjs.length;i++){ if(inputObjs[i].type==='button'){ inputObjs[i].onclick=func

JavaScript实现清空(重置)文件类型INPUT元素值的方法_javascript技巧

本文实例讲述了JavaScript实现清空(重置)文件类型INPUT元素值的方法.分享给大家供大家参考,具体如下: 因为安全限制,脚本是不能随意设置其value值的,所以并不能像其它表单输入域那样用属性来设置使其重置. 重置一个文件域的值,归纳起来主要有 3 种方法. 本文分析这三种方法的浏览器兼容性以及优缺点,并给出一个比较完美的综合方案的代码和Demo. 重置文件域的三种方法: 1. 设置value属性为空. 对于IE11以上和其它较新的非IE的现代浏览器Chrome/Firefox/Ope

JS中数组重排序方法_javascript技巧

1.数组中已存在两个可直接用来重排序的方法:reverse()和sort(). reverse()和sort()方法的返回值是经过排序后的数组.reverse()方法会反转数组项的顺序: var values=[1,2,3,4,5]; values.reverse(); alert(values); //5,4,3,2,1 在默认情况下,sort()方法按升序排列数组,sort()方法会调用每个数组项的toString()转型方法,然后比较得到字符串,确定如何排序.即使数组中的每一项都是数值,s

Bootstrap中CSS的使用方法_javascript技巧

Bootstrap 使用了一些 HTML5 元素和 CSS 属性,所以需要使用 HTML5 文档类型. <!DOCTYPE html> <html lang="zh-CN"> ... </html> 为了让 Bootstrap 开发的网站对移动设备友好,确保适当的绘制和触屏缩放,需要在网页的 head 之中添加 viewport meta 标签,如下所示: <meta name="viewport" content=&quo

js与jquery获取父级元素,子级元素,兄弟元素的实现方法_javascript技巧

先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 原生的JS获取ID为test的元素下的子元素.可以用: 比如: <div id="dom">    <div></div>    <div></div>    <div></div></div> var