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 相关文章推荐
解决 firefox 不支持 document.all的方法
Mar 12 Javascript
js 未结束的字符串常量错误解决方法
Jun 13 Javascript
jQuery学习笔记之2个小技巧
Jan 19 Javascript
jQuery统计上传文件大小的方法
Jan 24 Javascript
jQuery中noconflict函数的实现原理分解
Feb 03 Javascript
Javascript实现Web颜色值转换
Feb 05 Javascript
js实现瀑布流的三种方式比较
Jun 28 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
Oct 31 Javascript
jQuery实现checkbox列表的全选、反选功能
Nov 24 Javascript
原生js FileReader对象实现图片上传本地预览效果
Mar 27 Javascript
vue集成百度UEditor富文本编辑器使用教程
Sep 21 Javascript
extract-text-webpack-plugin用法详解
Feb 14 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函数
2011/05/31 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
JavaScript中Function详解
2015/02/27 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
django 修改server端口号的方法
2018/05/14 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
python 制作网站小说下载器
2021/02/20 Python
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
酒店办公室文员岗位职责
2013/12/18 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
就业导师推荐信范文
2015/03/27 职场文书
人民调解协议书
2016/03/21 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB