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 相关文章推荐
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
Apr 12 Javascript
用jquery仿做发微博功能示例
Apr 18 Javascript
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
Jan 26 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
Apr 07 Javascript
微信小程序 地图map实例详解
Jun 07 Javascript
vue实现表格数据的增删改查
Jul 10 Javascript
详解vue中async-await的使用误区
Dec 05 Javascript
微信小程序实现多个按钮的颜色状态转换
Feb 15 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
Aug 20 Javascript
JavaScript中0、空字符串、'0'是true还是false的知识点分享
Sep 16 Javascript
JavaScript实现简单日历效果
Sep 11 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
ezSQL PHP数据库操作类库
2010/05/16 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
PHP7 其他修改
2021/03/09 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
react-native fetch的具体使用方法
2017/11/01 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
python控制台显示时钟的示例
2014/02/24 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
Python自动发邮件脚本
2017/03/31 Python
numpy中索引和切片详解
2017/12/15 Python
Python语言进阶知识点总结
2019/05/28 Python
python3实现微型的web服务器
2019/09/03 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
C# .NET面试题
2015/11/28 面试题
初中校园之声广播稿
2014/01/15 职场文书
网页美工求职信
2014/02/15 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
房贷收入证明范本
2015/06/12 职场文书
《比的意义》教学反思
2016/02/18 职场文书
古诗之感恩老师
2019/10/24 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript