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库与其他JS库冲突的解决办法
Feb 07 Javascript
A标签中通过href和onclick传递的this对象实现思路
Apr 19 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
两种简单的跨域方法(jsonp、php)
Jan 02 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
Apr 18 Javascript
详解Layer弹出层样式
Aug 21 Javascript
layer实现关闭弹出层刷新父界面功能详解
Nov 15 Javascript
vue解决弹出蒙层滑动穿透问题的方法
Sep 22 Javascript
浅析Angular 实现一个repeat指令的方法
Jul 21 Javascript
javascript使用canvas实现饼状图效果
Sep 08 Javascript
Vue 修改网站图标的方法
Dec 31 Vue.js
JavaScript/TypeScript 实现并发请求控制的示例代码
Jan 18 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设计模式 Decorator(装饰模式)
2011/06/26 PHP
php实现的通用图片处理类
2015/03/24 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
js对象的构造和继承实现代码
2010/12/05 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
Node.js读取文件内容示例
2017/03/07 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
关于python字符串方法分类详解
2019/08/20 Python
python2.7使用scapy发送syn实例
2020/05/05 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
瑞典度假品牌:OAS
2019/05/28 全球购物
煤矿安全生产责任书
2014/04/15 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
教师个人事迹材料
2014/12/17 职场文书
皇城相府导游词
2015/02/06 职场文书
党员证明信
2015/06/19 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
Python机器学习之PCA降维算法详解
2021/05/19 Python
浅谈MySQL中的六种日志
2022/03/23 MySQL