博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
揭开AS程序的外纱(八) -- 容易被忽视的数组实用功能
阅读量:6478 次
发布时间:2019-06-23

本文共 1567 字,大约阅读时间需要 5 分钟。

  1. length属性用来删除数组元素

    假设我们定义了这样一个数组:

    var arr:Array = new Array("first","second","third","four","five");

    我想删除后面3个元素,怎么做最方便呢?

    答案:用length属性!

    arr.length = 2;

    运行之后,立即达到想要的效果。

 

    2. 用splice删除元素、插入元素

    splice是一个非常实用的命令,即可以用来删除元素,也可以用来插入元素,你都会用不?

    (1) 删除元素

    假设还是上面那个数组,我要删掉中间第2到第4三个值,要怎么做呢?

    答案是:arr.splice(1,3);

    如果用arr.splice(2);效果和arr.length = 2一样!也是删除数组的利器!

    (2) 插入元素

    如果我要在第二个元素后面插入"old"和"new"这2个元素,要怎么做呢?

    答案是:arr.splice(2,0,"old","new");

    splice的参数说明我就不写了,大家看下帮助文档吧。这个方法是非常实用的!

 

    3. 怎么样才能最方便的复制数组?

 

    (1) 用slice命令复制数组(浅复制)

    还是以上面的那个数组为例,我要复制这个数组,怎么样最方便呢?

    答案:var newarr:Array = arr.slice();

    这里我提到一个浅复制的概念。什么是浅复制呢?就是说,如果这个数组和示例中那样,都是由基元数据组成(int、uint、number、string等),那么用slice方法可以完全复制!但如果这个数组的元素包含object,那么复制下来的只是一个指针,如果对该元素做修改,原来那个数组的该元素也同样会被修改,所以叫浅复制!

    我举个例子,在第一帧写入代码如下:

    var tobj:Object = {tt:5}; //定义一个object

    var tarr:Array = new Array(tobj); //定义一个数组

    var carr:Array = tarr.slice(); //用slice方式复制数组

    trace(tarr[0].tt); //输出:5

    carr[0].tt = 6; //修改复制的数组的第一项

    trace(carr[0].tt); //输出:6

    trace(tarr[0].tt); //输出:6

    从该例子可以清楚的看到,slice只能实现浅复制,但其实已经非常实用了!

    (2) 如何实现深复制?

    如果真的有必要用到深复制,那么只能自己写函数了。我下面写一个示例,实现深复制。用到的具体方法就不详细叙述了,如果大家有需要直接搬过去用就可以了!

    var tobj:Object = {tt:5};

    var tarr:Array = new Array(tobj);

    var carr:Array = depthCopy(tarr);

    trace(tarr[0].tt); //输出:5

    carr[0].tt = 6;

    trace(carr[0].tt); //输出:6

    trace(tarr[0].tt); //输出:5

    //该函数实现深复制

    function depthCopy(source:Array) {

        var by:ByteArray = new ByteArray();

       by.writeObject(source);

       by.position = 0;

       return(by.readObject());

    }

 

    这三个方法,在平时的使用中都是很实用的,但也是比较容易被忽视的。希望大家都能熟练这三个用法!

本文转自 windtoto 51CTO博客,原文链接:http://blog.51cto.com/windtoto/383920,如需转载请自行联系原作者
你可能感兴趣的文章
python的单例模式
查看>>
13~1003的和
查看>>
myeclipse启动jboss报ERROR [MainDeployer] Could not create deployment
查看>>
pycharm如何新项目如何不默认创建虚拟环境(吐槽)
查看>>
Loadrunner检查点小结(很经典)
查看>>
MySQL字段类型详解
查看>>
ORACLE 的游标
查看>>
虚拟机安装的UBUNTU全屏的方法:
查看>>
java虚拟机类加载器
查看>>
ASP.NET状态管理之八(会话Session)
查看>>
I.MX6 Android 5.1.1 下载、编译
查看>>
background
查看>>
转载:大型网站架构演变和知识体系
查看>>
set集合
查看>>
SVN服务器的搭建和使用
查看>>
mvc中枚举的使用和绑定枚举值到DropDownListFor
查看>>
多目标跟踪的评价指标
查看>>
python 生成器
查看>>
HTTPS(SSL)详解以及PHP调用方法
查看>>
突发小事件,USB接口问题
查看>>