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 相关文章推荐
javascript对talbe进行动态添加、删除、验证实现代码
Mar 29 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
Feb 20 Javascript
谈谈AngularJs中的隐藏和显示
Dec 09 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
Jun 01 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
Jun 14 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
Feb 25 Javascript
angular实现图片懒加载实例代码
Jun 08 Javascript
React-Native中props具体使用详解
Sep 04 Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
详解关于微信setData回调函数中的坑
Feb 18 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 Javascript
jQuery实现弹幕特效
Nov 29 jQuery
在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将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
picChange 图片切换特效的函数代码
2010/05/06 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
node.js中使用socket.io的方法
2014/12/15 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
详解如何在Javascript和Sass之间共享变量
2019/11/13 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
使用Python写一个小游戏
2018/04/02 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
django model object序列化实例
2020/03/13 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
会计系毕业生求职信
2014/05/28 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python
vue选项卡切换的实现案例
2022/04/11 Vue.js