JavaScript数组之Array

目录

1、前言    -------------------------------------------------------------------------     并没有索引

2、Array的创建    -----------------------------------------------------------------    并没有索引

3、Array对象元素的操作    -------------------------------------------------------     并没有索引

4、Array对象的属性    ------------------------------------------------------------    并没有索引

5、Array对象的方法    ------------------------------------------------------------    并没有索引



1、前言

      在讲数组之前我们来聊聊什么是数组。简单来说数组是用来存储相同数据类型的数据集合,该集合存储在堆内存中,由一个引用变量来索引该集合的首地址。(具体的可以去看一门高级编程语言)

       组成数组的数据被称为数组的分量元素下标变量,个人比较喜欢称为元素。数组中的元素存储在一个连续性的内存块中,并通过索引来访问,也被称为下标。数组第一个元素的下标为0,所以最后的下标为当前长度减一,即应用变量名.length-1,length是数组的长度属性。有多少个元素,其值就为多少。




2、数组的创建 ------ 数组的操作

通过上述的介绍,不明白数组结构的人想必对数组也有了一定的了解,下面我们来正式介绍JavaScript中的Array数组

通过静态的Array对象创建数组对象的有三种方式

      创建任意长度的数组对象:  引用变量名 = new Array();

      创建指定长度的数组对象:  引用变量 = new Array(size);

      创建指定元素的数组对象:  引用变量 = new Array(element1,element2,......,elemenN);

      JavaScript的Array数组比较特殊,它可以存储不同数据类型的数据。第一种语法创建Array对象时,元素的个数是不确定的,用户可以在赋值时任意定义;第二种语法创建固定数组长度的Array对象,用户在赋值时定义的元素个数不能超过指定的长度第三种语法在定义Array对象时对数组对象进行赋值,其长度为数组元素的个数,用户可以在当前长度下继续赋值。如果我们只定义Array对象,并不对其进行赋值,那么成为一个空的数组对象。

Test1 = new Array();
Test2 = new Array(5);
Test3 = new Array("1",2,"3","4",5);		//Test3长度为5
console.log(Test1);
Test1[1] = 1;
Test1[10] = 10;
console.log(Test1);
console.log("插入新元素后的Test1数组长度为:"+Test1.length);	
console.log(Test2);
console.log(Test3);
console.log("Test3当前数组长度为:"+Test3.length);

//往Test3中继续输入元素
Test3[5] = 6;
Test3[6] = 7;
console.log(Test3);
console.log("插入新元素后的Test3数组长度为:"+Test3.length);




3、Array对象元素的操作------Array对象元素的存储和获取

Araay对象元素的存储主要有3种方法,分别如下

       (1)、在定义时直接输入数组元素,但该方法只能在数组元素确定的情况下才能使用。

Arr = new Array("a","b","c");

       (2)、通过指定下标向数组输入元素,该方法可以任意地将元素插入到指定的数组下标中。但要注意的是:如果Array对象是指定长度的数组对象,那么就要防止插入的下标不能超过制定的长度;如果重复向相同下标中插入元素,那么最后的元素会覆盖掉之前的元素。

Arr = new Array();
Arr[0] = "a";
Arr[1] = "b";
Arr[2] = "c";

       (3)、利用循环语向数组批量输入元素。一般用于向Array对象中赋初值。

var num = 5;
for(var i = 0;i < num;i++){
	Arr[i] = i;
}


Array对象元素的获取主要也是3种方法,分别如下

        (1)、指定具体下标获取元素值,通常将获取的值存储在一个变量中。

Arr = new Array(1,2,3,4,5);
var num1 = Arr[0];
var num2 = Arr[1];
var num3 = Arr[2];

        (2)、通过循环语句批量输出

Arr = new Array(1,2,3,4,5,6,7,8,9);
方法一
for(var i in Arr){
    document.write(Arr[i]);
}

方法二
for(var i=0;i<Arr.length;i++){
    document.write(Arr[i]);
}

        (3)、通过数组引用对象名直接输出所有元素,注意输出的元素之间会用逗号隔开。

Arr = new Array(1,2,3,4,5,6,7,8,9);
document.write(Arr);


4、Array对象的属性(不作重点解释)

        (1)、length属性用于返回数组的长度,即元素个数。JavaScript数组的length属性是可变的,需要特别注意的是,当length属性被设置得更大时,整个数组的状态事实上不会发生变化,仅仅是length属性变大;当length属性被设置得比原来小时,则原先数组中索引大于或等于length的元素的值全部会丢失。

//创建数组引用对象,当前数组长度为9
var Arr = new Array(1,2,3,4,5,6,7,8,9);

//改变数组长度,大于最先的数组长度
Arr.length = 12;
//打印改变数组长度后的数组元素和长度
console.log(Arr);
console.log("改变后的数组长度为:"+Arr.length);
				
//再次改变数组长度,小于最先的数组长度
Arr.length = 6;
//打印第二次改变数组长度后的数组元素和长度
console.log(Arr);
console.log("第二次改变后的数组长度为:"+Arr.length);
				
//再次扩容,大于最后一次改变的长度
Arr.length = 10;
//打印扩容后的数组元素和长度
console.log(Arr);
console.log("第三次改变后的数组长度为:"+Arr.length);


        (2)、prototype属性是object共有的,用于向对象添加属性和方法。

//为Array对象添加最大元素值的方法,该方法调用函数array_max获得最大值
Array.prototype.max = array_max;  
var x = new Array(1,3,5,4,2);  
var y = x.max();  		//存储最大值
document.write(y);		//输出最大值
				
function array_max(){
//注意谁调用,该this就是谁,由于是x引用数组调用故,this[0]为1
//定义起始最大值
var max = this[0];
					
for(var i=1;i<this.length;i++){  
	if(max < this[i]){  	//将遍历的每个元素都和最大值进行比较
		max=this[i];  	//更新最大值
	}  
	return max;
}


        (3)、constructor属性返回当前对象的构造函数名

var Arr = new Array(1,2,3,4,5);

if (Arr.constructor == Array){
	document.write("This is an Array");
}else if (Arr.constructor == Boolean){
	document.write("This is a Boolean");
}else if (Arr.constructor == Date){
	document.write("This is a Date");
}else if (Arr.constructor == String){
	document.write("This is a String");
}


5、Array对象的方法



        5.1、数组元素的添加删除

        数组元素的添加和删除可以使用concat()、unshift()、push()和pop()、shift()方法实现

                (a)、concat()方法可以将其它数组或元素连接到当前数组的尾端。

                            语法:Arr1.concat(Arr2 or value)

                 注意:连接后的结果并没有存储在发起连接的数组对象中,所以要么将连接后的结果赋值给连接对象本身更新数组元素,要么就创建一个新的数组对象来存储连接后的结果。具体看下例代码        


var arr1 = new Array(3)
arr1[0] = 1
arr1[1] = 2arr1[2] = 3
				
var arr2 = new Array(3)
arr2[0] = 4
arr2[1] = 5
arr2[2] = 6
				
var arr3 = new Array(3)
arr3[0] = 7
arr3[1] = 8
arr3[2] = 9
				
//数组arr1连接arr2和arr3的结果
console.log(arr1.concat(arr2,arr3));
//检验连接后数组arr1的元素,发现并没有改变
console.log(arr1);
				
//将连接后的数组存储在引用数组对象arr4中
var arr4 = arr1.concat(arr2,arr3);
console.log(arr4);		//检验arr4数组
				
//arr4数组连接具体值10、11、12之后将结果赋值给本身
arr4 = arr4.concat(10,11,12);
console.log(arr4);		//检验连接具体值后的arr4数组


       从上述代码可以看出,数组arr1指定固定长度为3,当数组arr1和arr2、arr3连接之后长度为9超过了指定长度,但系统不会报错。这是因为连接对象连接其他对象之后成为了一个新的Array对象,并没有将被连接的元素存储到连接对象的尾端,故不会报错;与之不同的是,如果将连接后的新对象赋值给连接对象arr1,那么arr1就会将之前的指引对象断掉重新指向新的Array对象,这一点涉及到Java的内存分配机制(其他语言不作解释)


        (b)、unshift()方法可以在指定数组的头部添加一个或多个元素

                    语法:Array对象名.unshift(value1,value2,......);

                    注意:和concat方法不一样的是,元素是实际插入到数组中的,并不受限于数组的长度。

var Arr1 = new Array(3)
Arr1[0] = 1
Arr1[1] = 2
Arr1[2] = 3
console.log(Arr1);
Arr1.unshift(4,5);  ←----
console.log(Arr1);


        (c)、push()方法在数组的末尾添加一个多个元素,并返回数组长度

                   语法:Array对象名.push(value1,value2,......);

                   注意:和unshift一样,元素是实际插入到数组中的,并不受限于数组的长度。

var Arr1 = new Array(3)
Arr1[0] = 1
Arr1[1] = 2
Arr1[2] = 3
console.log(Arr1);
Arr1.push(4,5);  ←----
console.log(Arr1);


       Array对象的删除方法 shift 和 pop 与 unshift 和 push方法一样,只是前者是删除元素,后者是增加元素。这里我就不往下讲解,赶兴趣的同学可以自行学习。



       5.2、获取数组中的某段数组元素

              Array对象的slice()方法提供了从数组中返回从指定开始到结束下标之间的选定元素

              语法:引用对象名.slice(起始下标,结束下标);

              注意:起始下标规定了从那个下标开始取值如果该值是负数,那么它规定以数组尾部为起点开始逆推,也就是说-1是最后一个元素,-2是倒数第二个元素,以此类推。结束下标规定了从那个下标结束取值,如果该值没有指定,那么切分的数组包含从起点下标开始后的所有的元素;如果该值是负数,那么它的从数组尾部开始算起。

              重点在于,截取出来的数组第一个元素就是其实下标元素,而最后一个元素是最终元素的前一个。开始取值和结束取值的含义不同,开始取值包含该元素,而结束取值不包含该元素。另外不管起点和重点的坐标是正数还是负数,起点坐标必须在终点坐标的前面,即无论正负,起点在终点的左边,方向指向右。

var Arr = new Array(1,2,3,4,5,6,7,8,9,10);

//以下标2中的元素为起点,到下标4为结束点,即只读取到下标3
console.log(Arr.slice(2,4));

//起点下标必须在终点下标的左边,两者连线方向指向右。
//以起点为正,终点为负。
console.log(Arr.slice(1,-2));

//以起点为负,终点为正。
console.log(Arr.slice(-8,6));

//以起点为负,终点也为负。
console.log(Arr.slice(-6,-3));

和上面的数组连接一样,这里截取出来也是一个新的数组对象,不影响原数组,所以一般将截取后的数组存储在一个引用变量中,例如:var num = Arr.slice(2,6);


       5.3、将数组转换成字符串

               将数组转换成字符串的方法有toString()、toLocaleString()和join(),这里我们只讲解toString和join方法。

              (1)、toString()方法可以将数组转换为字符串,并返回结果

                         语法:var sum = Arr.toString();

                         注意:无论是字符串数组还是数值数组均转换为字符串

var Arr = new Array(1,2,3,4,5,6,7,8);
//检验转换前的数组元素和数组类型
console.log(Arr);
console.log(typeof Arr);

//检验转换后的数组元素和数组类型
var Container = Arr.toString();   //存储对  ←-----
console.log(Container);
console.log(typeof Container);



            (2)、join()方法将数组中的所有元素都放入一个字符串中,可以指定每个元素之间的间隔符。如过没有指定间隔符,则默认使用逗号,如上图效果。

var Arr = new Array(1,2,3,4,5,6,7,8);
//检验转换前的数组元素和数组类型
console.log(Arr);
console.log(typeof Arr);

//检验转换后的数组元素和数组类型
var Container = Arr.join("*");   //存储对象  ←-----
console.log(Container);
console.log(typeof Container);


这篇文章到这里就介绍完毕了,有问题欢迎指出

------   END   ------

猜你喜欢

转载自blog.csdn.net/rao_limon/article/details/80174162