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 问答知识整理
Feb 11 Javascript
用js实现in_array的方法
Nov 05 Javascript
防止jQuery ajax Load使用缓存的方法小结
Feb 22 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
Mar 28 Javascript
Javascript闭包用法实例分析
Jan 23 Javascript
谈谈Jquery中的children find 的区别有哪些
Oct 19 Javascript
jQuery实现日期联动效果实例
Jul 26 Javascript
实例讲解JS中pop使用方法
Jan 27 Javascript
vue中axios实现数据交互与跨域问题
May 12 Javascript
vue中实现弹出层动画效果的示例代码
Sep 25 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
Nov 12 Javascript
微信小程序实现倒计时功能
Nov 19 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
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
Python中的高级函数map/reduce使用实例
2015/04/13 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
CSS中几个与换行有关的属性简明总结
2014/04/15 HTML / CSS
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
装修五一活动策划案
2014/01/23 职场文书
幼儿园家长评语
2014/02/10 职场文书
竞聘书格式及范文
2014/03/31 职场文书
安全生产管理责任书
2014/04/16 职场文书
信用卡工作证明模板
2014/09/14 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
培训后的感想
2015/08/07 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP