手机版

JavaScript数组详解

时间:2021-11-15 来源:互联网 编辑:宝哥软件园 浏览:

在编程语言中,数组的重要性不言而喻。数组也是JavaScript中最常用的对象之一。数组是有序的值集合。由于弱类型,JavaScript中的数组非常灵活和强大。与Java等强类型高级语言中的数组只能存储相同类型或其子类型的元素不同,JavaScript可以在同一个数组中存储各种类型的元素,并且其长度可以动态调整。随着数据的增加或减少,阵列长度可以自动改变。创建一个数组用多种方法在JavaScript中创建一个数组构造函数1。无参数构造函数,创建空数组Copy代码如下: var a1=new Array();2.一个数字参数构造函数,它指定数组的长度(因为数组的长度可以动态调整,所以影响不大)。创建指定长度数组的代码如下: var a2=new Array(5);3.带有初始化数据的构造函数,创建数组并初始化参数数据复制代码:VARA3=NewArray (4,' hello ',new date());文字量1。使用方括号创建空数组相当于调用无参数构造函数复制代码如下: var a4=[];2.使用括号传入初始化数据相当于用初始化数据调用构造函数复制代码如下: vaa 5=[10];注1。使用构造函数创建数组时,如果传入数值参数,将创建一个参数长度的数组;如果传入多个参数,会创建一个数组,并将参数作为初始化数据添加到数组中,复制代码如下: vaa 1=new array(5);console . log(a1 . length);//5 console . log(a1);//[],数组为空var a2=new Array(5,6);console . log(a2 . length);//2 console . log(a2);//[5,6]但是,按照字面意思,无论传入多少参数,参数都会被视为初始化内容,代码复制如下: vaa 1=[5];console . log(a1 . length);//1 console . log(a1);//[5] var a2=[5,6];console . log(a2 . length);//2 console . log(a2);//[5,6]2.创建带初始化参数的数组时,最好不要在末尾带多余的“,”。不同的浏览器对此的处理方式不同。复制代码如下:VAA1=[1,2,3,];console . log(a1 . length);console . log(a1);这个脚本在现代浏览器上运行的结果和我们想象的一样,长度是3,但是在IE的低版本中是一个长度为4的数组。最后一段数据是未定义数组的索引和长度数组的值,可以通过自然数索引访问进行读写。下标也可以是变量或表达式,以获得非负整数。复制代码如下:VAA1=[1,2,3,4]。console . log(a1[0]);//1 var I=1;console . log(a1[I]);//2console . log(a1[I]);//3 Array也是一个对象。使用index的秘密在于,array会将索引值转换为相应的字符串(1=“1”)作为对象属性名console . log(a1中的1)。//true,真的是属性索引。特殊性在于数组会自动更新长度属性。当然,因为JavaScript语法规定数字不能作为变量名,所以我们不能显示数组的格式1可以看到,负数,甚至非数字的“索引”都是允许的,只是这些会变成数组的属性,而不是索引。复制的代码如下:var a=new Array(1,2,3);a[-10]=' a[-10]';a[' SSS ']=' SSS ';image

这样,我们可以看到所有的索引都是属性名,但是只有自然数(具有最大值)是索引。通常,当我们使用数组时,不会出现数组越界错误。正因为如此,数组的索引可能不是连续的。当访问索引不存在的元素时,我们返回未定义的复制代码。代码如下:var a=new Array(1,2,3);a[100]=100;console . log(a . length);//101 console . log(a[3]);//undefined console . log(a[99]);//undefined console . log(a[100]);100image

在上面的例子中,虽然直接给[100]赋值不会影响[4]或[99],但数组的长度会受到影响。数组的长度属性等于数组中的最大索引1。我们知道数组的长度属性也是一个可写属性。当数组的length属性强制小于等于最大索引值时,数组会自动删除indexd大于等于length的数据,并在刚才的代码中增加几个重复的代码,如下: a . length=2 console . log(a);//[1,2]此时会发现a[2]和a[100]被自动删除。同样,如果长度设置为大于最大索引1的值,数组将自动展开,但不会向数组中添加新的元素,只会在尾部添加空白来复制代码,如下所示: a . length=5;console . log(a);//[1,2] //后面没有添加/删除3个未定义元素的基本方法。上面的例子已经使用了向数组中添加元素的方法,可以使用索引直接复制代码(索引不需要是连续的)。代码如下:var a=new Array(1,2,3);a[3]=4;console . log(a);//[1,2,3,4]上面提到的数组也是一个对象,索引只是一个特殊的属性,所以我们可以用删除对象属性的方法,用delete删除数组元素,复制代码如下: delete a[2];console . log(a[2]);//undefined类似于直接将[2]赋值为undefined,不会改变数组长度,也不会改变其他数据image的索引与值的对应关系。

栈方法上面的例子一直被学生发现,尤其是它的删除方法,这不是我们想要的表达式。很多时候,我们希望删除中间元素后,后面元素的索引会自动减少一个,同时数组的长度也会减少一个,就像栈中取的那个一样。阵列已经帮助我们完成了这个操作。pop和push可以让我们使用堆栈作为先进先出的方法,使用数组复制代码,如下所示:VAR A=NewArray (1。推(4);console . log(a);//[1,2,3,4]console . log(a . length);//4 console . log(a . pop(a));//4 console . log(a);//[1,2,3]console . log(a . length);//3队列方法既然已经实现了堆栈方法,怎么能减少FIFO队列呢?shift方法可以删除数组索引的最小元素,并将后面元素的索引和长度减少一,这样就可以使用shift/push来模拟队列。当然,对应shift方法,还有一个unshift方法,用来给数组头增加一个元素。复制代码如下:var a=新数组(1,2,3)。a . unshift(4);console . log(a);//[4,1,2,3]console . log(a . length);//4 console . log(a . shift(a));//4 console . log(a);//[1,2,3]console . log(a . length);//3终极神器JavaScript提供了一种拼接方法,解决了一次添加和删除数组的问题(当这两种方法结合使用时,可以达到替换的效果)。该方法有三个参数:1 .开始索引;2.删除元素的位移;3.插入新元素。当然,您也可以编写多个拼接方法来返回由删除的元素组成的新数组,或者如果没有删除,则返回一个空数组。复制代码如下:VAR A=NewArray (1,2,2)。通过删除前两个参数,可以使用拼接删除数组元素,这也会带来索引调整和长度调整。复制的代码如下:var a=new Array(1,2,3,4,5);console.log(a.splice(1,3));//[2,3,4]console . log(a . length);//2 console . log(a);//[1,5]如果数组索引不是从0开始,结果会很有趣。有这样一个数组复制代码如下: var a=new Array();a[2]=2;a[3]=3;a[7]=4;a[8]=5;image

复制代码如下:console.log(a.splice(3,4));//[3]console . log(a . length);//5 console . log(a);//[2: 2、3: 4、4: 5]image

从上面的例子可以看出,拼接的第一个参数是绝对索引值,而不是相对于数组索引,第二个参数不是删除的元素个数,而是执行删除动作的次数,而不是根据数组的实际索引移动,而是连续移动。同时调整后面的元素索引,前面的索引忽略插入和替换。只要将方法的第二个参数,即删除动作的次数设置为0,拼接就可以在后面填充第三个参数和要插入的内容时执行插入操作。如果第二个参数不是0,插入前会在这个位置删除,即复制代码的替换效果如下:var a=new Array(1,2,3,4,5)。a .拼接(1,0,9,99,999);console . log(a . length);//8 console . log(a);//[1,9,99,999,2,3,4,5] a .拼接(1,3,8,88,888);console . log(a . length);//8 console . log(a);//[1,8,88,888,2,3,4,5]通用方法join(char)在C#和其他语言中也可用。它的功能是将带有参数作为连接器的数组元素(对象调用其toString()方法)连接成一个字符串,复制代码如下:VAR A=NewArray (1,2,3)。console.log(a.join(','));//1,2,3,4,5 console . log(a . join(' '));//1 2 3 4 5slice(开始,结束)不应与split方法混淆。切片的复制代码如下:var a=new Array(1,2,3,4,5);console . log(a);//[1,2,3,4,5] console.log(a.slice(1,2));//console.log(a.slice(1,-1));//[2,3,4] console.log(a.slice(3,2));//[]console . log(a);//[1,2,3,4,5]方法用于返回数组中的片段或子数组。如果只写一个参数,将参数返回到数组末尾,如果参数为负,则从数组末尾开始计数(-3表示数组是第三个,这是大多数人不会做的,但是当你不知道数组的长度,想丢弃最后n个,但是数组的长度很容易知道的时候,就有用了。如果start大于end并返回一个空数组,值得注意的是slice不会改变原始数组,而是返回一个新数组。Concat(array)看起来像剪切,但这真的不是拟声词。concat方法用于拼接数组。a.concat(b)返回一个由A和b组成的新数组,既不会修改任何原始数组,也不会递归连接数组内部的数组。复制代码如下:var a=new Array(1,2,3,4,5);var b=新数组(6,7,8,9);console . log(a . concat(b));//[1,2,3,4,5,6,7,8,9]console . log(a);//[1,2,3,4,5]console . log(b);//[6,7,8,9]使用reverse()方法来反转数组,但不同的是它会修改原始数组并复制代码如下:var a=new Array(1,2,3,4,5);a .反向();console . log(a);//[5,4,3,2,1]同样,当数组索引不连续或以0开头时,需要注意复制代码如下: var a=new Array();a[2]=2;a[3]=3;a[7]=4;a[8]=5;image

复制代码如下: a . reverse();image

Sortsort方法用于对数组进行排序。当没有参数时,它将按字母升序排序。如果它包含未定义的,它将排在最后,对象元素将调用它的toString方法。如果要按照自己的定义排序,可以传递一个排序方法,这是典型的策略模式。同样,排序将改变原始数组。复制代码如下:var a=new Array(5,4,3,2,1);a . sort();console . log(a);//[1,2,3,4,5]但是。复制代码如下:var a=new Array(7,8,9,10,11);a . sort();console . log(a);//[10,11,7,8,9]因为是按照字母表排序的,所以7比10大。此时,我们需要传入一个自定义的排序函数来复制代码如下:var a=new Array(7,8,9,10,11);a.sort(函数(v1,v2){ return v1-v2;});console . log(a);//[7,8,9,10,11]类似于C#中的排序(中的设计模式——。NET Framework使用策略模式按列表排序),只是方法可以直接传入。以下内容纯属猜测。排序在内部使用快速排序。每次比较两个元素的大小时,如果没有参数,会直接判断字母表。如果有参数,那么将正在比较的两个参数传递给用户定义的方法并调用它们(正在比较的两个数字将被传递给用户定义的方法的v1和v2)。如果返回值大于0,表示v1v2如果等于0,则表示v1=v2如果小于0,则表示v1v2。事实上,我们传入的方法是告诉sort如何比较大元素和小元素。至于整理和移动元素的过程,人们已经写好了,猜测也就结束了。最后,了解这些数组真的很棒,就是它们功能强大,灵活,但是在遍历元素和获取它们的位置时有一些不便,在ECMAScript中已经解决了。熟练的使用可以让我们的JavaScript优雅高效。

版权声明:JavaScript数组详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。