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学习之闭包分析
Dec 02 Javascript
JavaScript原型继承之基础机制分析
Aug 26 Javascript
JS中prototype关键字的功能介绍及使用示例
Jul 21 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
javascript防篡改对象实例详解
Apr 10 Javascript
vue高德地图之玩转周边
Jun 16 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
Dec 28 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 Javascript
vue操作下拉选择器获取选择的数据的id方法
Aug 24 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
Apr 29 Javascript
Vue可自定义tab组件用法实例
Oct 24 Javascript
JavaScript中的this基本问题实例小结
Mar 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
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
php中substr()函数参数说明及用法实例
2014/11/15 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
JS 判断代码全收集
2009/04/28 Javascript
JS 文件传参及处理技巧分析
2010/05/13 Javascript
javascript天然的迭代器
2010/10/29 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
2017/04/10 Javascript
vue 注册组件的使用详解
2018/05/05 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
layui 中select下拉change事件失效的解决方法
2019/09/20 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
Python命名空间详解
2014/08/18 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
python构建基础的爬虫教学
2018/12/23 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
深入了解Python 变量作用域
2020/07/24 Python
Python list和str互转的实现示例
2020/11/16 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
英语求职信范文
2014/05/23 职场文书
司法所长先进事迹
2014/06/02 职场文书
人民币使用说明书
2019/04/17 职场文书