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 相关文章推荐
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
Dec 10 Javascript
基于javascript实现tab切换特效
Mar 29 Javascript
js实现div模拟模态对话框展现URL内容
May 27 Javascript
详谈$.data()的用法和作用
Feb 13 Javascript
vuejs使用FormData实现ajax上传图片文件
Aug 08 Javascript
JavaScript实现的数字与字符串转换功能示例
Aug 23 Javascript
微信小程序组件之srcoll-view的详解
Oct 19 Javascript
JS实现的邮箱提示补全效果示例
Jan 30 Javascript
简单说说angular.json文件的使用
Oct 29 Javascript
JS使用H5实现图片预览功能
Sep 30 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
May 23 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
Jun 22 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
PHP基于cookie实现统计在线人数功能示例
2019/01/16 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
Python ftp上传文件
2016/02/13 Python
python开发之str.format()用法实例分析
2016/02/22 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
Python urllib3软件包的使用说明
2020/11/18 Python
自荐书格式
2013/12/01 职场文书
执行力心得体会
2013/12/31 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
教师年度个人总结
2015/02/11 职场文书
联欢会开场白
2015/06/01 职场文书
商业计划书格式、范文
2019/03/21 职场文书
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫