最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JavaScript基础-Array

    正文概述 掘金(小_小陳)   2021-07-08   521

    这是我参与新手入门的第2篇文章

    前言

    每天一题算法,生活都充实了!正当我开心的沉醉在算法中,突然发现JavaScript不支持真正的多维数组,只能使用数组的数组来模拟。让我感受到自己才疏学浅,于是乎,开始重温Array吧。

    大致分为以下几类:

    数组的方法这里就不多说了,直接参考MDN,里面的帮助文档写的详细。

    (数组的长度是0到232-1之间的整数)

    稀疏数组

    所谓稀疏数组,指的是元素没有连续索引的数组,length属性的值大于元素数,例如:[0,,2]。通俗的来讲就是数组中有间隙。

    可以用Array()构造函数,或者给大于元素长度的索引赋值来创建稀疏数组

    var sparseArr1 = new Array(10); //数组长度为10且没有元素
    
    var sparseArr2 = [];
    sparseArr2[9] = 0; //元素为0,数组的长度为10
    

    也可以通过字面量来创建

    var sparseArr1 = [1,,3]; //有两个元素,但数组长度为3
    
    var sparseArr2 = [,]; //没有元素,数组长度为1
    var sparseArr2 = [,,]; //没有元素,数组长度为2
    

    多维数组

    说到多维数组,不是很简单嘛,先来个二维数组:[[1],[2]]。深受Java的影响,为了申明一个二维数组的变量,于是我便大胆猜测var arr = new [][];然而,console里UncaughtSyntaxError:Unexpectedtoken]\color{red}{Uncaught SyntaxError: Unexpected token ']'}UncaughtSyntaxError:Unexpectedtoken′]′亮闪闪的红色字体映入眼帘。

    怎么回事呢,JavaScript不支持真正的多维数组,可以使用数组的数组来模拟。以下才是常规操作:

    var arr = new Array(5);
    for(var i = 0; i < arr.length; i++){
        arr[i] = [1];
    }
    

    首先定义一个数组arr,遍历arr数组中每一项并且赋值为数组[1]arr就变成[[1],[1],[1],[1],[1]]这样的二维数组啦。

    亦或是直接字面量:

    var arr = [[1],[1]];
    

    高级一点的写法:

    var arr = Array.apply(null,{length:2}).map(value => value = [1]);
    

    此处arr的值为[1,1]。Array.apply(null,{length:2})是用来创建有初始化的数组,其结果为[undefined,undefined];与Array(2)没有初始化的结果[,]有所不同。

    需要注意的是:

    类数组

    类数组,顾名思义:类似数组但不是数组的对象,不能够全部使用数组的方法。满足类数组的条件:

    例1:

    var obj = {
        0 : 'STA',
        1 : 'SUN',
        length : 2
    }
    var arr = Array.from(obj); //['STA','SUN']
    

    obj以数字作为属性名并且有length属性,因此obj是一个类数组对象。当然可以通过Array.from()来将类数组转成数组。

    例2:

    var str = '123';
    var arr = Array.from(str); //['1','2','3']
    

    字符串也可以看作类数组。

    例3:

    function foo(){
        console.log(arguments);
        //Arguments(2) [1, 2, callee: ƒ, Symbol(Symbol.iterator): ƒ]
        console.log(arguments.length); //2
    }
    foo(1,2);
    

    同样arguments也是一个类数组,arguments作为函数外部传入实参的集合,如果对参数进行处理,需要用到数组的方法,直接调用方法是不可取的。那么有办法让类数组中的数据使用数组的某些方法呢?当然是可以的:

    function foo(){
        let arr = Array.prototype.map.call(arguments,value => value + 1);
        console.log(arr);  //[2,3]
    }
    foo(1,2);
    

    从上例可以看到,我们可以通过call改变数组map的执行环境,从而使类数组中的数据使用map方法;也可以先将类数组通过Array.from()转变成数组再进行map操作。

    总结

    稀疏数组是元素没有连续索引的数组;JavaScript不支持真正的多维数组,可以使用数组的数组来模拟;类数组需要有length属性以及数字属性名。

    当然,写的可能不是很详细,或是错误的地方,欢迎大家补充、指正。


    起源地下载网 » JavaScript基础-Array

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元