内存中连续多个数据的数据结构,再起一个统一的名字。
数组也是一个对象,和我们普通的对象功能类似,也是用来储存一些值的。不同的是普通对象是使用字符串作为属性名的,而数组使用数字作为索引操作元素。
数组的存储性能比普通对象要好,在开发中我们经常使用数组来存储一些数据。
使用 typeof 检查数组的数据类型时就会返回 object 对象类型。
为什么要使用数组:
普通的变量只能存储一个数据程序(数据程序 = 数据结构 + 算法)
算法:解决问题的步骤
数据结构:数据在内存中的存储结构,好的数据结构可以极大的提高程序的执行效率
什么时候使用数组:
只要存储多个连续的数据就使用数组
(一)创建空数组:2种
1、数组直接量:
语法: var arr = [ ];
var arr = [ ]; //意味着创建一个不包含元素的数组
var arr = [12,13,14]; //意味着创建一个包含三个元素的数组
2、使用new
语法:var arr = new Array();
var arr = new Array(); //定义一个不包含元素的数组
var arr = new Array(‘Aa‘,‘Bb‘,‘Cc‘); //定义一个三个字符串元素的数组
在创建数组时,还不知道数组里面的元素内容时。
(二)创建数组的同时初始化
1、数组直接量:var arr = [元素1,元素2…];
2、用 new Array方法:var arr = new Array(元素1,元素2,…)
在创建数组时,如果已经知道了数组里面的元素内容,就可以使用创建数组并同时进行初始化这种方式。
var array = [111,222,333];
var array = new Array(111,222,333);
(三)先声明空数组,再添加元素
直接量
var arr = [ ];
arr[0] = ‘aaa‘;
arr[1] = ‘bbb‘;
new Array方法
var arr = new Array();
arr[0] = ‘安安‘;
arr[1] = 111;
arr[3] = true;
上面这种既有字符串又有数字,还有布尔值的数组,称之为混合类型的数组。
元素:数组中的每个数据都是元素
如何访问:下标,数组中唯一标识每个元素储存位置的序号。
索引:从0开始的整数就是索引;索引(index)一个索引对应一个值,这一个整体称之为元素。
特点:从0 开始,连续不重复
何时:如果想访问数组元素只能,使用下标
语法:数组名[ i ] (用法和单个变量完全一样)
数组GET操作和SET操作
(一)设置数组元素的值——SET
1、向数组中添加元素
语法:数组[索引] = 值;
var arr = new Array();
arr[0] = 10;
arr[1] = 33;
arr[2] = 22;
arr[3] = 44;
console.log(arr);
注意:10在索引为0的位置,33在索引为1的位置,索引都是从0开始的
2、向数组中修改添加元素
var ss = [98,22,100];
ss[2] = 60; //将值为100的元素重新赋值为60;
ss[3] = 75; //在元素的尾部添加一个新的元素;
注意:索引从0 开始,最大到 length-1;
(二)获取数组元素的值——GET
语法: 数组[索引]
1、读取数组中的元素
注意:如果读取不存在的索引,他不会报错而是返回 undefined
var arr = new Array();
arr[0] = 10;
arr[1] = 33;
arr[2] = 22;
console.log(arr[2]);
console.log(arr[4]);
(三)数组的 length 属性:
(获取数组的元素个数)
记录了数组中理论上的元素的个数,length 的值永远都是最大下标 +1
语法:数组.length
length 设置或是获取数组的长度 (检查有几个元素,元素个数)
1、对连续的数组使用length,可以获得数组中元素的个数(连续的数组——缩印按照顺序排列0、1、2、3、…)
var arr = new Array();
arr[0] = 10;
arr[1] = 33;
arr[2] = 22;
arr[3] = 44;
console.log(arr.length);
2、对非连续的数组,length的数组长度为最大索引+1(假设最大索引是98,那么数组.length的结果就是99)
var arr = new Array();
arr[0] = 10;
arr[1] = 33;
arr[2] = 22;
arr[3] = 44;
arr[10]= 99;
console.log(arr.length);
console.log(arr);
(修改length)
1、如果修改的 length 大于数组原来长度,则多出的部分会空出来
var arr = new Array();
arr[0] = 10;
arr[1] = 33;
arr[2] = 22;
arr[3] = 44;
arr.length = 10;
console.log(arr.length);
console.log(arr);
2、如果修改的 length 小于原长度,则多出的元素会被删除(可以通过length来删除元素)
var arr = new Array();
arr[0] = 10;
arr[1] = 33;
arr[2] = 22;
arr[3] = 44;
arr.length = 2;
console.log(arr.length);
console.log(arr);
(向数组最后一个位置添加元素)
语法: 数组[数组.length] = 值;
注意: 如果 [ ] 里不加数组名,那么就是到全局中去找length(假设数组的最大索引为3,就要往4加。如果想往数组再添加顺序索引内容,就要比最大索引 + 1)。
var arr = new Array();
arr[0] = 10;
arr[1] = 33;
arr[2] = 22;
arr[3] = 44;
arr[arr.length] = 77;
arr[arr.length] = 88;
arr[arr.length] = 99;
console.log(arr.length);
console.log(arr);
遍历数组的元素,通常选用 for 循环语句,元素的检索(下标)作为循环变量
元素索引从0开始,到 length-1 结束
var arr = [12,13,14,15,16]
for(var i = 0;i<arr.length;i++){
arr[i] += 10;
}
console.log(arr);
length总结:
获得数组的最后一个元素:arr[arr.length - 1]
获得倒数第n个元素的位置:arr[arr.length - n]
数组缩容:减小 arr.length 的数值,会删除结尾的多余元素
遍历数组:依次访问数组中的每个元素,对每个元素执行相同的操作
for(var i = 0;i<arr.length;i++){
arr[i] //当前正在遍历的元素
}
(一)索引数组:下标为数字的数组
数组特殊的特点:三个不限制
1、不限制数组元素的个数:长度可变
2、不限制下标越界
获取元素:不报错!返回undefined
修改元素值:不报错!自动在指定位置创建新元素,并自动修改length属性值为最大索引 +1;
修改length属性为最大索引 +1;
如果索引不连续的数组——稀疏数组
3、不限制元素的数据类型
(二)关联数组:可以自定义下标名称的数组
为什么使用关联数组
索引数组中的下标没有明确的意义;
hash数组可以实现元素的快速增删,查找,
什么时候使用关联数组
只有希望每个元素都有专门的名称的时候,就使用关联数组;
1、关联数组的创建方式
如何创建关联数组(两步)
第一步:创建空数组
第二步:向空数组中添加新元素,并且自定义下标名称。
var name = [ ];
name[‘xiaoming‘] = ‘小明‘;
name[‘hanhan‘] = ‘憨憨‘;
2、关联数组的遍历
由于关联数组的 length 属性值无法获取其中元素的数量,所以遍历关联数组只能使用for … in循环
for( var key in hash){
key //只是元素的下标名
aa[key] //当前元素值
}
(三)索引数组和关联数组的对比
索引数组:
1、以字符串输出
2、索引是数字
3、length属性有效
4、访问元素,都用数组名[‘索引‘]
5、可以 for 循环遍历
关联数组:
1、不能使用字符串输出
2、下标是自定义的字符串
3、length属性失效(=0)
4、不能用 for 循环遍历,需要使用 for … in循环
索引数组和关联数组的查找
总结:如果只要希望快速查找元素的时候,就使用hash数组
原文:https://www.cnblogs.com/nyw1983/p/11788891.html