数组
7.1数组的概念
案例:计算5名学生的平均成绩
var a1,a2,a3,a4,a5;
a1 = Number(prompt("请输入分数"));
a2 = Number(prompt("请输入分数"));
a3 = Number(prompt("请输入分数"));
a4 = Number(prompt("请输入分数"));
a5 = Number(prompt("请输入分数"));
var ave = (a1+a2+a3+a4+a5) / 5;
alert(ave);
这个程序很简单,但是如果是100人呢,难道要真的复制100遍?
怎么解决?显然需要循环。
但是尝试一下就会发现,循环使用不上,因为无法去控制a1,a2,也就无法循环控制变量a1、a2联系起来。
var a = [];
var sum = 0;
for(var i=0; i<5; i++){
a[i] = Number(prompt("请输入分数"));
sum += a[i];
}
var ave = sum/a.length;
alert(ave);
这段代码能够实现同样的功能,而且如果是100人的话,只要把循环的条件改为i<100即可,整个程序的结构和代码量和人数多少没有关系。
为什么和人数没有关系?因为和循环结合起来了。
为什么能和循环结合起来呢?因为我们把变量的表示方式改变了,即名称+序号的方式,那么序号是可以用循环变量去控制。
7.2数组的定义与元素访问
定义有三种方式:
(1)var a = [];
(2)Var a = new Array();
(3)Var a = [0,0,0];
访问元素:数组名+下标
a[0] a[3]
需要注意的是下标从0开始,
所以在使用的时候需要注意越界问题,比如5个元素的数组,那么它的下标范围为[0-4],不包括5,5已经越界了。
数组的本质:一组变量的集合,或者说是一组内存单元。只不过对于变量的表示方式使用的是数组名+下标的方式。
7.3数组的常用属性和方法
数组的属性:
length:
(1)告诉我们数组的长度:数组名.length
(2)通过该属性可以改变数组的长度
数组的常用方法:
(1)unshift()在数组的头部添加元素,返回值是新数组的长度
shift():删除数组头部的元素,返回值是删除的头部元素。
(2)indexOf():查找在数组中重复出现的元素第一次出现的位置,返回值是该元素的下标。
lastIndexOf():查找在数组中重复出现的元素最后一次出现的位置,返回值是该元素的下标。
(3)push:在数组的尾部插入元素,返回值是添加元素后数组的长度。
pop():从数组的尾部删除最后一个元素,返回值是删除的元素
(4)slice(开始位置的下标,结束位置的下标):提取数组中指定连续的子数组。前包括,后不包括。
(5)splice(开始删除位置的下标,要删除元素的长度,要选择插入或替换的内容),splice有“剪接”的含义。前面两个参数定义“剪”的部分,第三个参数定义“接”的部分,经过不同的参数组合就可以实现一下三个功能。
①删除操作:删除数组中指定的任意元素
②插入操作:在数组中指定位置插入元素
③替换操作:在数组中替换指定位置的元素
如果有删除元素,则返回删除元素的数组,否则为空。
(6)reverse将数组中的元素倒序输出。在原数组的基础上进行反序输出,不会创建新数组。
(7)map:原数组的映射,经过函数的加工。函数给出前面两个参数,改变的是原数组,不给的话,返回新数组。
一般我们传递的参数都是数组、字符串等类型的数据,有些时候可能需要传递一个函数,那么如何去传递一个函数呢?
var a = [2,4,6,8];
var b = a.map(fun);
alert(a);
alert(b);
}
function fun(value,index,self){
return value*value;
}
我们可以将以上内容简写为:
var a = [2,4,6,8];
var b = a.map(function (value,index,self){
return value*value;
});
alert(a);
alert(b);
这就是匿名函数。
7.4for……in循环
一般而言,我们遍历一个数组用的都是for循环,会对所有元素进行遍历
var arr = [1,2,3,4,5,6];
for(var n=0; n<arr.length; n++){
alert(arr[n]);
}
alert(arr);
用for……in循环
var arr = [1,2,3,4,5,6];
for(var i in arr){
arr[i];
}
alert(arr);
结果与上面的代码相同
但是for与for……in还是有区别的
var arr = [1,2,3,4,5,6];
arr[10] = 10;
for(var n=0; n<arr.length; n++){
alert(arr[n]);
}
alert(arr);
var arr = [1,2,3,4,5,6];
arr[10] = 10;
for(var i in arr){
alert(arr[i]);
}
alert(arr);
从结果可以看出for……in不会遍历没有定义的元素
此外for……in还可遍历对象
var student = {
name:"张三",
sex:"男",
age:29
};
for(var p in student){
document.write(student[p]+"<br>");
}
结果显示的是student对象的所有属性值,值得注意的一点是这里要查看对象的某个属性值用的是数组的形式而不是对象名+“.”+属性名。
也可以用student[“sex”]访问对象的属性