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 相关文章推荐
汉化英文版的Dreamweaver CS5并自动提示jquery
Nov 25 Javascript
JS生成不重复随机数组的函数代码
Jun 10 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
Jun 17 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
Dec 08 Javascript
javascript深拷贝和浅拷贝详解
Feb 14 Javascript
jquery鼠标悬停导航下划线滑出效果
Sep 29 jQuery
JS实现移动端整屏滑动的实例代码
Nov 10 Javascript
node之本地服务器图片上传的方法示例
Mar 26 Javascript
微信小程序实现图片翻转效果的实例代码
Sep 20 Javascript
基于layui内置模块(element常用元素的操作)
Sep 20 Javascript
可拖拽组件slider.js使用方法详解
Dec 04 Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 Vue.js
在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 Cookie的一个使用注意点
2008/11/08 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
2020/08/26 Javascript
Python 26进制计算实现方法
2015/05/28 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
Django实现学员管理系统
2019/02/26 Python
Python匿名函数及应用示例
2019/04/09 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
详解python中的异常捕获
2020/12/15 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
中学生评语大全
2014/04/18 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
淘宝好评语句大全
2014/12/31 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
初中思品教学反思
2016/02/20 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书