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以下就可以了。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 密码学的基础知识_密码学的基本概念

    密码学的基础知识_密码学的基本概念最近在研究密码学加密,签名方面的东西。经过几天的学习对一些基础知识进行一下整理PKI:PKI是PublicKeyInfrastructure的首字母缩写,翻译过来就是公钥基础设施,在X509标准

  • Mariadb 安装教程 Windows版[通俗易懂]

    Mariadb 安装教程 Windows版[通俗易懂]MariadbWindows版安装教程1、下载软件:https://mariadb.org/download/2、双击运行mariadb-10.5.5-winx64.msi,3、点击iaccept…接受许可协议4、选择组件以及软件安装路径5、设置数据库的密码6、默认下一步7、点击install进行安装即可…

  • canbus速率_erie canal

    canbus速率_erie canalDatabus和canal都能够提供实时从数据库获取变更,并提供给下游的实时消费流的功能。本文针对两个系统实现和应用上的不同点,做了一个简单的对比:对比项Databuscanal结论支持的

  • window location href页面跳转的几种用法及其延展「建议收藏」

    window location href页面跳转的几种用法及其延展「建议收藏」一、location.href常见的几种形式self.location.href;//当前页面打开URL页面 window.location.href;//当前页面打开URL页面 this.location.href;//当前页面打开URL页面 location.href;//当前页面打开URL页面 parent.location.href;//在父页面打开新页面 top.loca…

  • python调用自己写的py文件

    python调用自己写的py文件

  • 游戏3d模型如何放到计算机中,三维建模技术在三维游戏中的应用

    游戏3d模型如何放到计算机中,三维建模技术在三维游戏中的应用张程怡摘要计算机图像技术及三维建模技术的不断发展,是三维游戏出现的重要原因之一。三维建模技术可以将现实中的物品和人在二维平面进行三维形态的模拟或再加工,达到将美术设计和计算机技术有机结合的效果,给人立体真实的感受。因此在三维游戏的制造过程中,三维建模技术得到了广泛应用。文章对三维建模技术的发展历程,三维建模技术在游戏中的运用原理进行了介绍,同时对于三维建模技术在三维游戏应用中仍存的问题及其发展…

发表回复

您的电子邮箱地址不会被公开。

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