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 相关文章推荐
filemanage功能中用到的common.js
Apr 08 Javascript
dreamweaver 安装Jquery智能提示
Apr 02 Javascript
jQuery - css() 方法示例详解
Jan 16 Javascript
利用jquery写的左右轮播图特效
Feb 12 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
Aug 16 Javascript
javascript实现动态导入js与css等静态资源文件的方法
Jul 25 Javascript
javascript数据类型验证方法
Dec 31 Javascript
Angular2 环境配置详细介绍
Sep 21 Javascript
JS中动态创建元素的三种方法总结(推荐)
Oct 20 Javascript
bootstrap手风琴制作方法详解
Jan 11 Javascript
JavaScript如何把两个数组对象合并过程解析
Oct 10 Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 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发送与接收流文件的方法
2015/02/11 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
node 版本切换的实现
2020/02/02 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
CSS超出文本指定宽度用省略号代替和文本不换行
2016/05/05 HTML / CSS
安全生产先进个人材料
2014/02/06 职场文书
护士毕业生自荐信
2014/02/07 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
不同意离婚上诉状
2015/05/23 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python
Redis可视化客户端小结
2021/06/10 Redis
Nginx跨域问题解析与解决
2022/08/05 Servers