1.数组的概念:
介绍概念之前,大家先来写一个案例:
计算十位同学的平均分:
常规思路:
var a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;
a1=Number(prompt("请输入第一位同学的分数"));
a2=Number(prompt("请输入第二位同学的分数"));
a3=Number(prompt("请输入第三位同学的分数"));
a4=Number(prompt("请输入第四位同学的分数"));
a5=Number(prompt("请输入第五位同学的分数"));
a6=Number(prompt("请输入第六位同学的分数"));
a7=Number(prompt("请输入第七位同学的分数"));
a8=Number(prompt("请输入第八位同学的分数"));
a9=Number(prompt("请输入第九位同学的分数"));
a10=Number(prompt("请输入第10位同学的分数"));
var average = (a1+a2+a3+a4+a5+a6+a7+a8+a9+a10)/10;
document.write(average);
但如果是100人呢?怎么解决?显然是需要使用循环,单但尝试之后显然发现,循环使用不上,究其原因,就是在这里无法控制变量,
也就是无法将循环控制变量和变量a1,a2联系起来。
如果使用数组呢?
var a = [];
var sum = 0;
for(var i=0;i<10;i++){
a[i] = Number(prompt("请输入分数"));
sum += a[i];
}
var ave = sum / a.length;
document.write(ave);
这段代码实现了相同的功能,如果计算更多的人数,只需要把循环条件改为1<r人数就可以了,整个程序的结构和代码量、人数没有多少关系。
为什么没有关系呢? 因为该代码成功地和循环结合了起来。
为什么可以和循环结合?因为我们把变量的表示方法改变了,即名称和序号的方式,那么序号是可以云用循环变量去控制。
2.数组的定义与元素访问
定义的方式:
1.var a = []
2.var a = new Array();
3.var a = [1,2,3]
访问元素:
数组名+下标 例:a.[0]
注意:下标从0开始,所以在使用的时候需要注意越界问题,比如5个元素的数组,那么他的下标范围为[0,4],并不包含5,因为5已经越界了。
数组的本质:一组数据(变量)的集合,或者说是一组内存单元,只不过对于变量的表示方法使用的是数组名+下标的方式。
数组的常用属性和方法:
属性:Length:1.数组长度;数组名.length
2.通过该属性可以改变(定义)数组的长度
数组的常用方法:
1.unshift:在数组的头部添加元素,返回值为新数组的长度
Shift:删除数组头部的元素,返回值是删除的头部元素
2.indexof:查找在数组中重复出现的元素第一次出现的位置,返回值是该元素的下标。
Lastindexof: 查找在数组中重复出现的元素最后一次出现的位置,返回值是该元素的下标。
3.push:在数组的尾部插入元素,返回值是添加元素后数组的长度。
pop:从数组的尾部删除最后一个元素,返回值是删除的元素。
4.slice(开始位置的下标,结束位置的下标):提取数组中指定连续的子数组。方法中的参数规律——前包括,后不包括。
5.splice( 剪接 )(开始删除未知的下标,要删除元素的长度,选择插入或替换的内容):前面两个参数定义剪的部分,第三个参数定义接的部分,经过不同的参数组合就可以实现以下三个功能:
功能:
1.删除操作:删除数组中指定位置的任意元素
2.插入操作:在数组中指定位置插入任意元素
3.替换操作:在数组中替换指定位置的元素
7.map:原数组的映射,经过函数的加工,返回给一个新数组。匿名函数。
拓展:匿名函数:
var a = [2,4,6,8];
var b = a.map(fun)
alert(b);
function fun(value,index,self){
return value*value;
}
简写为:
var b = a.map(function(value,index,self){
self[index] = value * value;
return value * value;
});
这就是匿名函数。
array[10] = 10
sum += array[j];
alert(sum)
}