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的offset、client、scroll使用方法详解
Dec 25 Javascript
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
js实现文字在按钮上滚动的方法
Aug 20 Javascript
分享javascript实现的冒泡排序代码并优化
Jun 05 Javascript
浅谈jquery的map()和each()方法
Jun 12 Javascript
JQuery之proxy实现绑定代理方法
Aug 01 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
Sep 05 Javascript
JS中Array数组学习总结
Jan 18 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
基于elementUI实现图片预览组件的示例代码
Mar 31 Javascript
vue基于better-scroll仿京东分类列表
Jun 30 Javascript
Javascript中async与await的捕捉错误详解
Mar 03 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
世界上第一台立体声收音机
2021/03/01 无线电
Get或Post提交值的非法数据处理
2006/10/09 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
vue跨域解决方法
2017/10/15 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
python BeautifulSoup使用方法详解
2013/11/21 Python
python的re模块应用实例
2014/09/26 Python
python验证码识别的示例代码
2017/09/21 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python如何实现数据的线性拟合
2019/07/19 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
八一建军节活动方案
2014/02/10 职场文书
学生个人自我鉴定
2014/03/26 职场文书
一岗双责责任书
2014/04/15 职场文书
计划生育工作汇报
2014/10/28 职场文书
限期整改通知书
2015/04/22 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js