## 认识数组
我们编程过程中需要一个可以存储大量数据的结构 -> 数组。
数组的概念:存储大量数据。可以使用一个变量名,存储大量的数据。
1、声明数组方法
<1>通过new运算符创建数组
参数的部分:传入你想存储在数组中的元素(JS弱引用,数组中可以存储任意的数据类型)
【注】元素:数组中存储的每一个值,叫做数组的元素。
<2>省略new运算符创建数组
以上两种创建数组的方法都不常用。
<3>直接通过数组常量赋值。JS中数组就是通过 []表示。
var arr = new Array(100, true, "hello");
alert(arr);
var arr = Array(100, true, "hello");
alert(arr);
var arr = [10, true, "hello"];
alert(arr);
重点:使用 new Array Array 创建数组的时候
当参数是数字,并且只有这一个参数的时候,生成一个对应长度的空数组。
var arr = new Array(10);
/*var arr = Array(10);
alert(arr);*/
var arr = [10, 20, 30];
alert(typeof arr); //object
访问数组的属性:
arr.length 输出数组中元素的个数
数组的元素个数 arr.length
【注】length属性,不是只读的,可以设置。
访问数组中的元素:
通过元素的下标访问,【注】元素下标从0开始的。
【注】循环和数组是绝配。
Math.random() 随机0~1之间的任意数 [0, 1)
2.遍历
for循环
for...in 快速遍历/快速枚举法 直接从头到尾直接遍历每一个元素。
for(var i in arr){
document.write(arr[i]);
}
//【注】在快速遍历的时候,不要对原数组中的元素个数进行修改。
3.数组的方法
系统提供了大量的数组的函数
栈结构 通过数组的方法模拟一个栈结构。
栈结构特点:先进后出
push pop
通过数组的方法:元素只能从同一头出,同一头进。
push
格式:数组.push(参数1, 参数2...);
功能:给数组的末尾添加元素。
返回值:添加完元素以后,数组的长度
pop
格式:数组.pop()
功能:从数组的末尾取一个元素下来
返回值:取下的元素
队列结构
特点:先进先出
通过数组的方法:从尾部插入元素,从头部取下元素。
push shift
shift()
格式:数组.shift()
功能:从数组头部取元素下来。
返回值:从数组头部取下的元素。
unshift 从数组的头部插入元素
格式:数组.unshift(元素...);
功能:从数组头部插入元素
返回值:插完元素以后数组的长度。
concat()
格式:数组.concat(数组1, 数组2, 变量/常量...);
功能:将这些数组中的元素,全部合并成一个新数组。不会修改原数组。
返回值:返回值就是生成的新数组。
concat() 没有传入参数,直接生成一个一模一样的新数组,返回。
slice()
格式:数组.slice(start, end);
功能:获取[start, end)下标范围内的元素,生成新数组,不会修改原数组。
返回值:生成的新数组。
splice() 可以实现增、删、改
格式:数组.splice(start, length, 元素1, 元素2 .....);
参数:第一个参数,开始截取的下标
第二个参数,截取的元素长度
第三个参数往后,在开始位置插入的元素
join() 数组--> 字符串
格式:数组.join(拼接符);
功能:将数组中每一个元素,通过拼接符,拼接成一个字符串
返回值:字符串
reverse() 逆序
功能:对原数组逆序
格式:数组.reverse()
sort()
【注】默认是按照字符串升序排序
参数:是一个函数
function(value1, value2){
return value1 < value2;
} 降序排列
function(value1, value2){
return value1 > value2;
} 升序
var arr = [1, 20, 15, 10, 5];
arr.sort();
alert(arr); //1,10,15,20,5 它会拿每一个数的第一个数字进行比较,一旦比较出大小,那么之后的数字不会再比较了
4.冒泡算法
冒泡排序:
规则:前后两两进行比较,如果符合条件,交换两个数的位置。
特点:每一轮比较,都能找出一个较大的数,放在正确的位置。
第一轮:五次
9, 8, 7, 6, 5, 4
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
第二轮:四次
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
第三轮:三次
7, 6, 5, 4
6, 7, 5, 4
6, 5, 7, 4
6, 5, 4, 7
第四轮:二次
6, 5, 4
5, 6, 4
5, 4, 6
第五轮:一次
5, 4
4, 5
比较轮数 = 数组长度 - 1
数组长度 = 比较的轮次 + 每轮次数
每轮次数 = 数组长度 - 比较的轮次
var arr = [9, 8, 7, 6, 5, 4];
//比较轮数:
for(var i = 0; i < arr.length - 1; 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;
}
}
}
5.选择排序
选择排序 --- 打擂台法
规律:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列。'';
结论:每一轮都能找到一个较小的数,放在正确的位置。
第一轮:
9, 8, 7, 6, 5, 4
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
第二轮:
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
第三轮:
9, 8, 7, 6
8, 9, 7, 6
7, 9, 8, 6
6, 9, 8, 7
第四轮:
9, 8, 7
8, 9, 7
7, 9, 8
第五轮:
9, 8
8, 9
比较轮数 = 数组长度 - 1
比较的次数 = 数组长度 - 当前轮数
var arr = [9, 8, 7, 6, 5, 4];
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;
}
}
}