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或asp实现的判断身份证号码是否正确两种验证方法
Nov 26 Javascript
Jquery公告滚动+AJAX后台得到数据
Apr 14 Javascript
JQUERY对单选框(radio)操作的小例子
Apr 25 Javascript
Jquery Ajax Error 调试错误的技巧
Nov 20 Javascript
javascript如何写热点图
Dec 08 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
Jun 08 Javascript
AngularJs上传前预览图片的实例代码
Jan 20 Javascript
不得不看之JavaScript构造函数及new运算符
Aug 21 Javascript
js判断节假日实例代码
Dec 27 Javascript
vue 不使用select实现下拉框功能(推荐)
May 17 Javascript
vue登录注册实例详解
Sep 14 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制作图型计数器的例子
2006/10/09 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
smarty中常用方法实例总结
2015/08/07 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
window.location的重写及判断location是否被重写
2014/09/04 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
利用python实现数据分析
2017/01/11 Python
python中pip的安装与使用教程
2018/08/10 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
学校教师安全责任书
2014/07/23 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
学校党员对照检查材料
2014/08/28 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
检举信的写法
2019/04/10 职场文书
详解nginx进程锁的实现
2021/06/14 Servers
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android
英镑符号 £
2022/02/17 杂记