JScript内置对象Array中元素的删除问题

JScript内置对象Array中元素的删除问题

    我们知道JScript给我们提供了一个内置的数组对象Array。Array对象除了提供了constructor、length和prototype外,还默认提供了13个方法:concat、join、pop、push、reverse、shift、slice、sort、splice、toLocaleString、toString 、unshift和valueOf,可是没有提供delete方法emsad.gif。

    要是熟悉JavaScript的话,会马上说,系统提供了一个delete操作,可以用来删除数组中的元素。对,JS系统里确实有一个delete可以删除数组中的元素。可是这个删除很难用,它确实可以删除元素,可是它却不更新Array对象的元素计数器。例如我们执行:

None.gif
var
 ary 
=
 [‘a’, ‘b’, ‘c’];
None.gif

delete
 ary[
1
];

    如果正确的执行删除后,我们希望会得到一个新的数组,他有两个元素[‘a’, ‘c’],长度为2。可是执行完后我们确实是得到了两个元素[‘a’, ‘c’]的数组,可是这个新数组的长度ary.length居然还是3!hitwall.gif。同时我们执行ary.toString()将得到”a,,c”,这也表明数组的计数器还是3,因为Array的toString()实际上执行的是Array.join(‘,’)。

    这样的删除在我们使用for( ; ; )遍历数组的时候,将会非常的郁闷,我们可能很容易就可能被一个undefined的值搞死掉了。那么怎么才能获得删除数组元素后同步数组的大小呢?由于Array本身提供的pop和shift两个函数可以”真正的”删除数组的元素,所以我们可以使用它们来自己扩充一个remove函数。

    但是pop和shift只能从数组的两端删掉元素,所以我们在删除之前需要对数组做一些整理,实现remove方法的代码如下:

None.gif
Array.prototype.remove 
=
 
function
(obj)
None.gif{

None.gif    

for
 ( 
var
 i
=
0
 ; i 
<
 
this
.length ; 
++
i )
None.gif    {

None.gif        

if
 ( 
this
[i] 
==
 obj )
None.gif        {

None.gif            

if
 ( i 
>
 
this
.length
/
2
 )
None.gif            {

None.gif                

for
 ( 
var
 j
=
i ; j 
<
 
this
.length
–
1
 ; 
++
j )
None.gif                {

None.gif                    

this
[j] 
=
 
this
[j
+
1
];
None.gif                }
None.gif                

this
.pop();
None.gif            }
None.gif            

else

None.gif            {

None.gif                

for
 ( 
var
 j
=
i ; j 
>
 
0
 ; 
—
j )
None.gif                {

None.gif                    

this
[j] 
=
 
this
[j
–
1
];
None.gif                }
None.gif                

this
.shift();
None.gif            }    
None.gif            

break
;
None.gif        }
None.gif    }
None.gif};

    移动整理数组的目的只是为了删除元素后不改变剩余元素的彼此相对位置,否则只用把需要删除的元素swap到两端pop或shift以下就可以了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111169.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 飞行器pid控制(旋翼飞控)

    先说下什么是四旋翼飞行器名称:四旋翼飞行器组件:一个机架,一个陀螺仪,四个无刷直流电机,一个电池,一块单片机(能飞起来的最基本配置)原理:利用四个电机旋转产生的反作用力托起飞行器上升,利用单片机和飞行控制算法控制电机使飞行器稳定然互简单介绍下串级PID算法名字:串级PID算法作用:采集飞行器姿态角,输出调控量是飞行器稳定先说一下姿态角,现在我们想象一个平铺在空间的一个“十”字,这个字左右晃,上下晃…

    2022年4月10日
  • Flask 让jsonify返回的json串支持中文显示

    Flask 让jsonify返回的json串支持中文显示用flask时遇到了返回字符串支持中文显示的问题,在web端显示的是utf-8的编码,而不是中文,如下图。虽然不影响接口的读取,但是可读性太差,于是研究了一下怎么直接显示成中文。最后找到了解决方案如下,在配置中加入下面一行代码就OK了。app.config[‘JSON_AS_ASCII’]=Falsejson.dumps()解决同样的问题可以加入ensure_ascii=False参考资料:

    2022年5月23日
  • Redis

    Redis

    2021年3月12日
  • Hibernate进阶之如何使用Hql内连接,外连接以及自连接

    Hibernate进阶之如何使用Hql内连接,外连接以及自连接

    2021年9月26日
  • 目前计算机常用的CPU型号,价格差异太大了!教你选择CPU型号及常见CPU后缀字母详解…[通俗易懂]

    目前计算机常用的CPU型号,价格差异太大了!教你选择CPU型号及常见CPU后缀字母详解…[通俗易懂]价格差异太大了!教你选择CPU型号及常见CPU后缀字母详解2020-05-2610:30:4012点赞20收藏1评论很多想要买电脑或笔记本的朋友,经常会看到配置介绍信息中,CPU处理器经常都有U、K、H等等之类的后缀字母,很多不太熟悉硬件的朋友可能就比较困惑,这些字母到底代表着什么意思,为什么仅仅只是后缀字母的不同,然后价格就相差几百上千呢?今天就详细为大家介绍常见CPU后缀字母所代表的的含义,…

    2022年5月29日
  • phpstorm 2021 激活码【中文破解版】

    (phpstorm 2021 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWN…

    2022年3月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号