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 入门·JavaScript 具有全范围的运算符
Oct 01 Javascript
分享27个jQuery 表单插件集合推荐
Apr 25 Javascript
easyui-combobox 实现简单的自动补全功能示例
Nov 08 Javascript
js继承实现方法详解
Dec 16 Javascript
AngularJS实现网站换肤实例
Feb 19 Javascript
ES6中的rest参数与扩展运算符详解
Jul 18 Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 Javascript
微信小程序实战篇之购物车的实现代码示例
Nov 30 Javascript
Webpack 4.x搭建react开发环境的方法步骤
Aug 15 Javascript
Vue中div contenteditable 的光标定位方法
Aug 25 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
May 20 Javascript
javascript实现图片轮播代码
Jul 09 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
全文搜索和替换
2006/10/09 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
2012/10/24 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
重写javascript中window.confirm的行为
2012/10/21 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
python 实现归并排序算法
2012/06/05 Python
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
Python实现新浪博客备份的方法
2016/04/27 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
客户代表自我评价范例
2013/09/24 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
新教师岗前培训方案
2014/06/05 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
村官个人总结范文
2015/03/03 职场文书
离婚起诉书范本
2015/05/18 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
毕业实习感受与体会
2015/05/26 职场文书
婚礼家长致辞
2015/07/27 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS