7数组
7.1数组的概念
案例:计算10个同学的平均分
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("请输入分数"));
var ave = (a1+a2+a3+a4+a5+a6+a7+a8+a9+a10)/10;
alert(ave);
这个程序很简单,但是如果是100人呢,难道要真的复制100遍?
怎么解决?显然需要使用循环。
但是尝试了一下就会发现 ,循环使用不上,因为无法控制变量a1,a2,也就是无法将循环控制变量和变量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;
alert(ave);
这段代码能够实现同样的功能,而且如果是100人的话,只要把循环的条件改为i<100即可,整个程序的代码和代码量和人数没有关系
为什么和人数没有关系?因为和循环结合起来了
为什么能和循环结合起来了呢?因为我们把变量的表示方式改变了,即名称+序号的方式(a[0]、a[1].......),那么序号是可以用循环变量去控制的
为什么要用数组?
处理批量数据的时候,代码量会随着数据量增加而增加,两者成正比
然而数组把变量的表达方式改变了,可以用下标来控制,
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已经越界了。
var a = new Array();
a[0] = 1;
a[1] = 2;
alert(a[0]);
alert(a[2]);
数组的本质:一组数据(变量)的集合,或者说是一组内存单元,只不过对于变量的表达方式使用的是数组名+下班标的方式
处理批量数据,需要首先想到数组
7.3数组常用属性和方法
数组的属性:
length:
告诉我们数组的长度:数组名.length
通过该属性可以改变数组的长度
var a= [];
var sum =0;
for(var i=0; i< a.length; i++){
a[i] = Number(prompt("请输入分数"));
sum +=a[i];
}
var ave = sum/ a.length;
alert(ave);
数组常用方法:
1)unshift:在数组头部添加元素,用b=a.unshift(1),alert(b),返回的是新数组的长度
shift:删除数组头部的元素,返回值是删除的头部元素
var a = [2,3,4,5,9] ;
b= a.unshift(7);
alert(b);
alert(a)
2)indexof:查找在数组中重复出现元素第一次出现的位置,返回值是该元素的下标
如果要输出第一个元素,可以先找到在哪然后输出如:
var b = a.indexOf("爱");
alert(a[b]);
lastLndexof:查找数组中重复出现的元素最后一次出现的位置,返回值是该元素的下标。
3)push :在数组尾部插入元素,返回值是添加元素后数组的长度
pop:在数组尾部删除元素,返回值是删除的元素
4)slice():提取数组中指定连续的子数组。(开始位置的下标,结束下标)
注意:是左开右闭结尾那个不包括,当只有开始位置下标时,提取子元素一直到最后
前面两个参数定义“剪”的部分,第三个参数定义“接”的部分,经过不同的参数组合就可以实现以下三个功能:
5)splice:(意思:剪接)
1、删除操作:删除数组中指定的任意元素
2、插入操作:在数组中指定位置插入元素
3、替换操作:在数组中替换指定位置的元素
(开始下标,删除下标,添加选择插入或者替换的数)
6)reverse将数组中的元素,反序输出,在元素组的基础上进行反序输出,不会重新创建一个新的数组。
7)map:原数组的映射,经过函数的加工,返回给一个新数组。
一般我们传递的参数都是数值、字符串等类型的数据,有些时候可能需要传递一个函数,那么如何去传递一个函数呢?
先定义一个函数,把函数名作为一个参数传递过去,
var a = [2,4,6,8];
var b = a.map(fun);
function fun(value,index,self){
return value *value;
}
alert(b);
我们可以将以上内容简写为以下形式:
这就是匿名函数:
var a = [2,4,6,8];
var b = a.map(function(value,index,self){
return value *value;
});
alert(a);
alert(b);