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


Posted in Javascript onMarch 08, 2007

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

Javascript 相关文章推荐
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
判断客户浏览器是否支持cookie的示例代码
Dec 23 Javascript
JSON格式化输出
Nov 10 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
Mar 28 Javascript
基于javascript实现九九乘法表
Mar 27 Javascript
JQuery为元素添加样式的实现方法
Jul 20 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
Sep 20 Javascript
Javascript中for循环语句的几种写法总结对比
Jan 23 Javascript
js遍历获取表格内数据的方法(必看)
Apr 06 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
May 03 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
Jul 25 Javascript
JavaScript中的执行环境和作用域链
Sep 04 Javascript
在JavaScript中遭遇级联表达式陷阱
Mar 08 #Javascript
原型方法的不同写法居然会影响调试的解决方法
Mar 08 #Javascript
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
Mar 08 #Javascript
JS类库Bindows1.3中的内存释放方式分析
Mar 08 #Javascript
使用IE的地址栏来辅助调试Web页脚本
Mar 08 #Javascript
JScript中的undefined和&quot;undefined&quot;的区别
Mar 08 #Javascript
JavaScript语句可以不以;结尾的烦恼
Mar 08 #Javascript
You might like
PHP在线书签系统分享
2016/01/04 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
2018/05/07 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
Python获取apk文件URL地址实例
2013/11/01 Python
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
高中毕业生生活的自我评价
2013/12/08 职场文书
军训教官感言
2014/03/02 职场文书
办公室主任职责范本
2014/03/07 职场文书
党务公开方案
2014/05/06 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
离婚协议书怎么写
2015/01/26 职场文书
原告代理词范文
2015/05/25 职场文书
2015年教师节新闻稿
2015/07/17 职场文书