jvaascript 数组
1、栈和队列(一维数组)
1 var arr = [1,2,3,4,5,]; 2 3 console.log(arr[0]); 4 5 //遍历数组(法一) 6 for(var i = 0;i <arr.length;i++){ 7 console.log("arr[%d]=%d",i,arr[i]); 8 } 9 10 //遍历数组(法二) 11 for(var i in arr){ 12 console.log("arr[%s]=%s",i,arr[i]); 13 }
//1.1使用构造函数创建一个空数组 //new开辟空间并返回内存空间的引用 var arr1 = new Array(); console.log(arr1); //1.2使用构造函数创建一个容量为20的数组 var arr2 = new Array(20); console.log(arr2); //使用构造函数创建一个包含三个元素额数组 var arr3 = new Array("a","b",1); console.log(arr3);
栈:古代中的木盆。
结构:从一个口进,从同一个口出
特点:先进后出。
push
【格式】数组.push();
【功能】给数组末尾添加元素。
参数:我们要添加的元素,参数个数随意。
返回值:添加元素后,数组的长度。
pop()
【格式】数组.pop();
[功能]移除数组末尾的最后一个元素。
返回值:移除的元素。
例:
var arr = ["钢铁侠","蚁人","绿巨人"];
arr.push("蜘蛛侠","快跟")
alert(arr);//钢铁侠,蚁人,绿巨人,蜘蛛侠,快跟
var arr = ["钢铁侠","蚁人","绿巨人"];
var res=arr.pop();
alert(res);//绿巨人
alert(arr);//钢铁侠,蚁人
队列结构:从一头进,从另外特点先进先出。
特点:先进先出。
shift()
[格式]数组.shift()
功能:从数组的头部取下一个元素。
返回值:取下的元素
unshift()
【格式】数组.unshift(参数......)
功能:从数组的头部插入元素,参数的个数随意。
返回值:插入元素以后,数组的长度。
var arr = ["钢铁侠","蚁人","绿巨人"];
var res=arr.unshift("超人","绿箭侠");
alert(arr);//超人,绿箭侠,钢铁侠,蚁人,绿巨人
alert(res);//5
concat() 合并数组
【格式】数组1.concat(数组二);
功能:将两个数组合并成一个新数组。原数组并不会被改变。
返回值:我们合并好的新数组。
参数:我们要合并的数组。
var arr1 = ["钢铁侠","蚁人","绿巨人"];
var arr2 = ["超人","绿箭侠"];
var arr = arr1.concat(arr2);
alert(arr);
alert(arr1);
alert(arr2);
reverse()数组反转
indexof()查找数组对应的元素下标
var arr = new Array(1,2,3,4,4,5);
var res = arr.lastIndexOf(4)
console.log(res);//4
slice()
【格式】数组.slice(start.end);
功能:基于当前数组获取指定区域元素,并创建一个新数组,源数组不变。
参数:start开始获取区域的下标,end结束获取区域的下标。
不包括end下标位置的元素。
返回值:指定区域元素生成的新数组。
var arr= ["钢铁侠","蚁人","绿巨人","超人","绿箭侠"];
var newarr = arr.slice(1,3);
alert(newarr);//蚁人,绿巨人
alert(arr);//钢铁侠,蚁人,绿巨人,超人,绿箭侠
splice 可以完成时删除、插入、替换操作。
【格式】数组.splice(star,length,元素......)
参数:
参数1:截取的开始下标。
参数2:截取的长度。
参数3:在截取开始下标位置,我们要插入的元素。插入的元素个数随意。
[注]会对源数组进行修改。
返回值:截取的元素,组成的数组
var arr= ["red","blue","green"];
//删除功能
var newarr = arr.splice(1,1);
alert(newarr);//blue
alert(arr);//red,green
//插入功能
var newarr = arr.splice(1,0,"yellow","xxx");
alert(arr);//red,yellow,green
alert(newarr); //null
//替换功能,先删除,后插入。
var newarr = arr.splice(1,1,"yellow");
alert(newarr);//blue
alert(arr);//red,yellow,green
join()
[格式]数组.join(拼接符)
功能:使用拼接符将数组中的元素拼接成字符串。
参数:拼接符。
返回值:拼接好的字符串。,
var arr = [10,20,30,40];
var str = arr.join("+ss");
alert(str); //10+ss20+ss30+ss40
2、二维数组
【格式】var arr = [[],[],[],[],[]];
【注】所谓二维数组,在数组中的元素还为数组。
例:
1, 2, 3, 4, 5
6, 7, 8, 9, 10,
11,12,13,14,15
16,17,18,19,20
var count = 0; //从1到25累加中间变重
var arr = [];
for(var i = 0; i < 5; i++){ //生成五个数组,存储在arr中
var newArr = [] ; //每个newArr都有五个数
for(var j=0; j< 5; j++){
newArr.push(++count);
}
arr.push(newArr);
}
alert(arr);//1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25
//打印左下角
for(var i= 0;i < arr.length;i++){//每一行中打印的元素和当前行数相等
for(var j= 0;j <= i;j++){
document.write(arr[i][j]+"  ");
}
document.write("<br />");
}
3、数组排序
系统提供排序方法:
reverse() 逆序排序 注:并非降序
【格式】数组.reverse()
var arr = [4,5,7,1,8];
arr.reverse();
alert(arr);//8,1,7,5,4
sort()将数组的元素升序排序
【格式】数组.sort()
【注】sort默认是按照字符串进行排序。AISSM码
【要求】一般情况下,我们要求自己去编写排序算法,系统提供的我们
排序函数,用的比较少。
var arr = [4,5,7,1,8];
arr.sort();
alert(arr);//1,4,5,7,8
var arr = [10,1,5,15];
arr.sort();
alert(arr);//1,10,15,5
4、冒泡排序算法
【原理】前后两个数两两进行比较,如果符合交换条件。
交换位置,直到所有数据排序完成,结束比较。
var arr = [4,5,7,1,8];
for(var i = 0;i <arr.length;i++ ){ //比较轮数
for(var j = 0;j< arr.length-i-1;j++){//每一轮比较次数
if(arr[j] > arr[j+1]){ //判断前后两个数是否符合交换条件
var tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
alert(arr);
5、选择排序
【原理】通过比较,首先先出最小的数放在第一位置上,然后在其余的数中选择
次小的数放在第二位置,以此类的数成为有序序列。
【注】打擂法
var arr = [4,5,7,1,8];
for(var i=0;i <arr.length - 1;i++ ){ //比较轮数
for(var j=i+1;j< arr.length;j++){
if(arr[i]>arr[j]){ //判断前后两个数是否符合交换条件
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
alert(arr);
6、数组引用
数组:复合数据类型/引用数据类型。
【注】所有复合数据类型都不直接存储在我们的函数中存,存储在堆段。
【注】函数运行的内存空间是预先分配好的,一旦分配上内存空间就不能进行改变了。
【注】在堆段,我们可以想要多少内存,就能随时分配多少内存。
【注】所有的复合数据类型,存储的都是门牌号,也就是地址。
所以这类数据类型我们叫做引用数据类型。
var a =10;
function sum(a){
var a=5;
alert(a);
}
alert(a);//10
sum(a); //5,访问后就释放了
alert(a);//10
var arr = [10,20];
function show(arr){
arr.push(30,40);
alert(arr);
}
alert(arr);//10,20
show(arr);//10,20,30,40
alert(arr);//10,20,30,40
例:
//封装冒泡排序
var arr = [20,30,70,80,90]
function bubble(arr){
for(var i = 0;i <arr.length;i++ ){ //比较轮数
for(var j = 0;j< arr.length-i-1;j++){//每一轮比较次数
if(arr[j] > arr[j+1]){ //判断前后两个数是否符合交换条件
var tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
bubble(arr);
alert(arr);
//封装选择排序
var arr = [20,30,70,80,90]
function choose(arr){
for(var i=0;i <arr.length - 1;i++ ){ //比较轮数
for(var j=i+1;j< arr.length;j++){
if(arr[i]>arr[j]){ //判断前后两个数是否符合交换条件
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
choose(arr);
alert(arr);