js 数组

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.替换操作:在数组中替换指定位置的元素

6.reverse:将数组中的元素反序输出。在原数组的基础上不会重新创建一个新数组。
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;
  });
这就是匿名函数。
最后给大家介绍一个新的循环 for in,用法如下:
 var array = [1,2,3,4];
   array[10] = 10
 for(var j in array){
         sum += array[j];
        alert(sum)
    }
这个是不是比常规的for循环简洁多了?更容易理解。
个人认为他比for循环更大的优势就是常规的for循环,遍历的是下标,比如上面这段代码,如果是常规for循环,下标在5-10之间的并不存在,但是还是被遍历出来了 显示多遍unfined
但这种写法被遍历出来的仅仅是1,2,3,4,10, 并没有多余的无用的数据


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值