js数组
和var i=1;这样的简单存储一样是js中的一种数据结构,是专门用来存储多个数据的一种数据结构。
摘:数组是一组数据的集合,其表现形式就是内存中的一段连续的内存地址,数组名称其实就是连续内存地址的首地址。
数组也是分为强类型和弱类型的:
强类型语言数组:1.内容是连续的 2.指定数组的时候要给一个长度 3.要规定存储数据类型
弱类型语言数组:可以不连续,不用指定长度,可以存储任何类型长度
js数组是弱类型数组。
js数组的定义方式:
//数组的定义方式 //第一种 var arr = new Array(); arr[0]=1; arr[1]=2; arr[2]=3; //第二种 var arr = new Array(1,2,3,4,5); //第三种 var arr = new Array(); arr.push(1); arr.push(2); //第四种 var arr = [1,2,3,4,5];
arr[]是数组的索引,数组的索引是从0开始的。
arr.push();是数组的一种方法,用来向数组添加数据
arr.length是数组的方法,代表数组的长度,表示数组下有几个元素
数组名.属性名
数组名.方法名()
JS数组中可以存储任意类型的数据
var arr = new Array(); arr[0]=1; arr[1]="hello";
二维数组:
//二维组数 var arr = new Array( new Array(11,12,13,14,15), new Array(21,22,23,24,25), new Array(31,32,33,34,35) );
数组可以作为数组的值,数组中的值可以是数组,这样叫做二维数组
二维数组的索引是arr[][]
遍历数组
//遍历数组 //1.for循环 for(var i=0;i<arr.length;i++){ alert(arr[i]); } //2.foreach循环 for(var a in arr){ alert(arr[a]); }
需要注意的是不能用 for(var i=1;i<=arr.length;i++),因为数组索引是从0开始的。
可以使用for...in语句实现对一个数组的所有元素的遍历,数组中有几个元素,for..in语句就循环执行多少次。
下面用两个例子试一下:
输入10个成绩,求总分,最高,最低
var arr=new Array(67,45,56,12,90,98,23,43,56,99,97); var g=0; var d=arr[0];//定义最小开始时等于第一个数 var z=0; for(var i=0;i<arr.length;i++){ z=z+arr[i]; //总分要在外边不能在里边 if(arr[i]>g){ g=arr[i]; }else{ if(arr[i]<=d){ d=arr[i]; } } } alert(z+","+g+","+d);
这里的思路是:
首先定义出数组,最高分g,最低分d开始时等于数组第一个元素,总分z
然后循环中,首先总分加数组元素
然后判断这个数组元素是否大于最高分,如果是则将这个分数赋给g,如果不是则判断是否小于最低分d,如果是则将此值赋给d
这里遇到的问题:找出最高分一开始就实现了,问题出在总分和最低分,计算总分要写在for循环下而不能写在判断中,否则得出的是高分的和。
最低分的要点在于开始赋值,如果和总分高分一样初始值为0,则第二个判断中,低分会一直为0,所以要把数组的第一个值赋给d,这样才能判断计算
添加数据时去重,下代码仅能输入一个数据
var arr=Array(2,1,11,2,31); var s=prompt("请输入学号"); for(var i=0;i<arr.length;i++){ if(s in arr){ break; }else{ arr.push(s); break; } } alert(arr);
这里的思路是
首先定义出数组,和用户输入的内容s
然后用for循环遍历数据,在for循环中使用if判断,如果s 在数组中,跳出,如果s不在数组中,写入数据
拓展:
数组里的索引叫做(key),数组里存的值叫做(value),他们是成对存在的,叫做键值对
摘:
JS中符号含义:
()表示函数执行
[]表示语法模拟,表示模拟Array类的实例(=new Array())
{}表示语法模拟,表示模拟Object类的实例(=new Object())
//表示语法模拟(正则对象),表示模拟RegExp类的实例(=new RegExp())