1.什么是数组?
数组对象是使用单独的变量名来存储一系列的值
其内部元素可以是不同类型的
js中的数组没有下标越界,比如定义一个数组长度为5:
var arr = ["你好","我好",true,8,12];
arr[9] = "大家好";
console.dir(arr);——>内部元素增加为6,并且其arr.length会被
扩充为10
2.用法:
定义数组:
1.var arr = [];长度为0的空数组
2.var arr = new Array(n);n为你数组的长度
3.var arr = new Array(12,14,"你好");当其中的元素被剪至1个时,
如果是正整数将会变成数组长度
打印数组:
console.log(arr);打印整个数组;与java相比较,java打印输出arr是其内存地址
数组长度:
arr.length
访问数组元素:
数组的下标从0开始给其中每一个元素定位。arr[i] i为下标。
根据下标可以做到很多事:
如:获取最后一个元素:
arr[arr.length-1];
如:在数组末尾追加一个元素:
arr[arr.length] = "数组";
如:删除数组末尾的最后一个元素:
arr.length--;
如:删除数组末尾第n个元素:
arr.length = arr.length-n;
遍历数组元素:
for(var i = 0;i< drinks.length;i++){
console.log(drinks[i]);
}
3.数组是引用类型的对象
基本数据类型:
基本数据类型的数据直接保存在定义变量所在的内存(windows)中。
两个变量之间赋值时,或者将变量作为参数传入函数式,将自己的值赋值给对方,
不会影响自己的值
引用数据类型:数据无法直接保存在变量所以内存的数据类型(变量和值不能在一起存储)
因为变量只允许保存一个值,二引用类型往往可以同时保存多个值。
引用数据类型的数据会在windows对象之外创建一个独立的存储空间。并且
每个独立的存储空间都有一个唯一的内存地址(0X666十六进制)。变量中保存的是一个
内存地址。每个引用了引用类型数据的变量,修改了其中的数据就等于修改了原数据。
null的使用:
有null就想到undefined。undefined一般只有js语言使用,给变量自动赋初始值。
在js中null专门给程序员使用,手动清除一个变量的内容。
什么时候清空一个变量(何时使用null)?
js内存中有一个类似于垃圾回收器的程序,它会记录引用了变量数据的次数,每有一次
引用,垃圾回收器中的count就会增加一次。每设置一个变量值为null,count就会减少
一次。当变量数据没有被引用(也就是所有引用的变量的内存地址变为了null)时,垃圾
回收器就进行回收处理。
注意:使用完一个较大的对象之后,一定要主动清空(手动赋值null),不然内存会很拥挤。
4.关联数组:
索引数组是下标从0开始的自然数。
可以自定义下标名称的数组 与索引数组不同。
为什么要用到关联数组呢?
为了让每个元素都有其明确的含义,方便查找、维护和读取
没有了索引下标如何遍历数组呢?
5.数组去重
方法一:
方法二:
如何比较这两种方法的效率?
利用时间函数:记录开始到结尾的时差
console.time("del");//开始时间
console.log(del(arr));//
console.timeEnd("del");//结束时间
6.数组API函数(列举较为常用)
1.String()-->String()括号中是需要被转换的数组
将数组中每一个元素都转换成字符串,用逗号链接
var arr = [1, 2, 3, 4, 5];
var before = String(arr);
2.join():把数组所有元素放入一个字符串中,用指定的分隔符进行分隔。
语法:arrayObject.join(separator) separator是参数,可选。制定要使用的自定义
的分隔符。如果省略该参数,则会使用逗号作为分隔符。在有些时候,需要我们做
到无缝连接每个元素,可以指定join("");
另一种用法:
3.concat() 拼接
语法:arrayObject.concat(arrayX,arrayX,......,arrayX) 改参数可以是具体的值也可以是
数组对象。可以是任意个。
返回一个新的数组。该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。如果
要进行 concat() 操作的参数是数组,那么添加的是数组中的元素,而不是数组。
4.arr.splice(starti,n) 向数组中删除/添加项目,然后返回被删除的项目。
(必然会删除,可以被添加)
注释:该方法会改变原始数组。
语法:arrayObject.splice(index,howmany,item1,.....,itemX)
index:必需。整数,规定添加/删除项目的位置,使用负数就是从数组末尾开始倒着删除
howmany必需。要删除的项目数量。如果设置为0,则不会删除项目。
item1,...itemX:可选。向数组添加的新项目。
添加数组:
注释:请注意,splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改
5.sort():用于对数组的元素进行排序。
注意:能够修改原数组
排序是根据Unicode码来排序的。但是可以给其API函数中增加参数改为大小排序。
看图:
6.push()、pop()、unshift()和shift()搭配使用。
注意:都改变原数组。
push():从数组末尾增加元素。返回新的长度
pop():从数组末尾删除元素。返回删除元素的值
unshift():从数组开头增加元素。返回新的长度
shift():从数组开头删除元素。返回删除元素的值
1.栈的两种实现: 后进先出
在js中没有栈,但是有些时候我们需要用到这种概念,可以通过Array对象的API函数来实现
第一种:push()和pop()搭配,后面进后面出
第二种:unshift()和shift()搭配,前面进前面出
2.队列的两种实现:先进先出
第一种:push()和shift()搭配,后面进前面出
第二种:unshift()和pop()搭配,前面进后面出
7.二维数组:
什么是二维数组?就是一个数组中,其元素也是数组。
创建:
遍历二维数组:
习题:
1.创建一个可以存放四组数据的二维数组,循环随机录入数据,计算每一组的平均值、总和
2.接收并输出某公司某月的考勤和扣款信息,假设公司有5个员工,每个员工的考勤项有上下
班忘打卡、迟到、早退、旷工,其中上下班忘打卡扣款10元/次,迟到和早退扣款为20元/次,
旷工100元/天 (使用二维数组)循环接收输入员工的编号、忘记打卡次数、迟到次数、
早退次数、旷工次数在网页中输出5个员工的考勤信息。
3.一家贸易公司有四位销售员,每位销售员负责销售四件商品,编写一个函数,接收每名销售员
销售的各类产品的数量。打印产品销售明细表,明细表包括每类产品的销售总数,以及每位
售员销售的产品数量占总销售的百分比。