1、概念:一般情况下数据类型相同的数据(不一定是数字,可以是任意数据类型)
作用:使用单独的变量名来存储一系列的值
2、数组的声明:
(1)通过new运算符创建数组
var arr = new Array(10,20,true,”hello”);
(2)省略new运算符创建数组
var arr = Array(10,20,true,”hello”);
(3)直接通过常量赋值创建数组
var arr = [10,20,true,”hello”];
3、数组的访问
在数组中存储的数据叫做数组的元素
arr[0]:表示数组的第一个元素,0是下标,也叫索引
4、数组中的几个名字
数组的长度(length属性)
数组元素的个数 arr.length
数组的下标
下标就是索引,即元素的序号,从0开始,最大值是length – 1
5、数组的赋值
(1)通过数组名和下标赋值
(2)通过循环赋值
6、数组的使用
遍历数组
普通for循环
for(var i = 0; I < 5;i++){
document.write(arr[i]);
}
for…in遍历数组或对象的属性
for(var i in arr){
document.write(arr[i]);
}
7、数组的方法
(1)栈方法
栈:先进后出
push()
格式:数组.push(参数1,参数2…);
功能:给数组的末尾添加元素
返回值:插完元素后数组的长度
pop():
格式:数组.pop()
参数:没有参数
功能:从数组末尾取下一个元素
返回值:取下的元素
(2)队列方法
队列:先进先出
push():向数组末端添加一个元素
shift():
格式:数组.shift()
参数:没有参数
功能:从数组的头部取下一个元素
返回值:取下的元素
unshift():
格式:数组.unshift(参数1,参数2,参数3….)
功能:向数组的头部插入元素
返回值:插入元素后数组的长度
(3)数组函数
concat():
1.拷贝原数组,生成新数组
2.合并数组
格式:数组.concat(数据1,数据2...)
返回值:合并的新数组
注:就算传入值是数组,数组中的元素要单独拆出来再进行合并
slice():
格式:
数组.slice(start,end);[start,end)
功能:
基于当前数组获得指定区域的元素,[start,end)区域提取元素组成新数组
返回值:
新生成的数组,原数组不会改变
splice():
格式:
数组.splice(start,length,数据1,数据2...)
参数:
start 开始截取的位置
length 截取的元素的长度
第三个参数开始 在start位置,插入的元素
返回值:
截取下来的元素组成数组
join():
格式:数组.join(字符串)
功能:将数组中的元素,用传入的拼接符,拼接成一个字符串
返回值:拼接好的字符串
reverse():
逆向排序
sort():
格式:数组.sort() 默认从小到大排序,按字符串排序
参数:一个函数,代表如何进行排序
数值排序:
arr.sort(function(value1,value2){
return value1 - value2;
})// 从小到大
arr.sort(function(value1,value2){
return value2 – value1;
})// 从大到小
slice():基于当前数组获取指定区域元素[start,end)
splice():由于参数的特殊性,可以完成增、删、改三个功能
8、冒泡排序
冒泡排序
规则:前后两个数,两两进行比较,如果符合交换提交就交换两个数的位置
规律:冒泡排序的每一轮排序,都可以找出一个较大的数,放到正确的位置
9, 8, 7, 6, 5, 4
第一轮:(比较了5次)
9, 8, 7, 6, 5, 4 9 > 8
8, 9, 7, 6, 5, 4
8, 7, 9, 6, 5, 4
8, 7, 6, 9, 5, 4
8, 7, 6, 5, 9, 4
8, 7, 6, 5, 4, 9
找到了第一大的数:9
第二轮:(比较了4次)
8, 7, 6, 5, 4
7, 8, 6, 5, 4
7, 6, 8, 5, 4
7, 6, 5, 8, 4
7, 6, 5, 4, 8
找到了第二大的数:8
第三轮:(比较了3次)
7, 6, 5, 4
6, 7, 5, 4
6, 5, 7, 4
6, 5, 4, 7
找到了第三大的数:7
第四轮:(比较了2次)
6, 5, 4
5, 6, 4
5, 4, 6
找到了第四大的数:6
第五轮:(比较了1次)
5, 4
4, 5
找到了第五大的数:5
数组长度 = 6
比较的轮数 = 数组的长度 - 1
第1轮, 比较5次
第2轮, 比较4次
第3轮, 比较3次
第4轮, 比较2次
第5轮, 比较1次
每一轮比较的次数 = 数组长度 - 当前轮数
9、选择排序
选择排序(打擂台法)
规则:选出一个位置,这个位置上的数,和后面所有的数进行比较,如果比较楚大小就交换两个数的位置
规律:每一轮都能选出一个最小的数,放到正确的位置
9, 8, 7, 6, 5, 4
第一轮:比较5次
9, 8, 7, 6, 5, 4 选择第一个位置,后面所有的数都与第一个位置的数比较大小,这里选择9
8, 9, 7, 6, 5, 4
7, 9, 8, 6, 5, 4
6, 9, 8, 7, 5, 4
5, 9, 8, 7, 6, 4
4, 9, 8, 7, 6, 5
第一轮结束,找到最小的数字为4
第二轮:比较4次
9, 8, 7, 6, 5 选择一个位置进行比较
8, 9, 7, 6, 5
7, 9, 8, 6, 5
6, 9, 8, 7, 5
5, 9, 8, 7, 6
第二轮结束,找到第二小的数字为5
第三轮:比较3次
9, 8, 7, 6
8, 9, 7, 6
7, 9, 8, 6
6, 9, 8, 7
第三轮结束,找到第三小的数字为6
第四轮:比较2次
9, 8, 7
8, 9, 7
7, 8, 9
第四轮结束,找到第四小的数字为7
第五轮:比较1次
8, 9
结束
数组的长度 = 6
比较的轮数 = 5
比较的轮数 = 数组的长度 - 1
第1轮比较了5次
第2轮比较了4次
第3轮比较了3次
第4轮比较了2次
第5轮比较了1次
每一轮比较的次数 = 数组的长度 - 当前的轮数
//用的擂台的下标,6个数,需要5个擂台
for(var i = 0; i < arr.length - 1; i++){
//被比较的数
for(var j = (i + 1); j < arr.length; j++){
if (arr[j] < arr[i]) {
var temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
补充:
1.内存分配,一次分配
预编译:在所有代码运行之前,将代码从头到尾看一遍。将这个程序需要运行的空间一次性分配好。
函数也会声明提升
声明提升:在当前作用域,声明变量和函数,会直接提升到整个代码的最前面运行。
2. 省略var,直接去强制给一个变量赋值,这个变量会被JS强制声明为全局变量。
3.二维数组
数组存储数据,数组中的每一个元素,可以是任意数据类型
数组中的元素可以是数组
二维数组:人为起的