一、数组的概念
- Array数组是数据的有序列表;
- 数组中的每一个值叫做元素。每一个元素都有自己的位置,这个位置叫做索引。索引是从0开始的;
- ECMAScript数组是没有类型的;
- ECMAScript同一个数组中可以存储不同类型的数据;
- ECMAScript语言中数组的长度是可以动态变化的;
- Array是ECMAScript中常用的引用类型之一;
二、数组的创建
1.字面量法
var arr = [];//创建一个空数组
var arr2 = [1,"abc",true,3.14];
2.构造函数法创建数组
var arr3 = Array();//创建了一个空数组
console.log("arr3 "+arr3.length);
var arr4 = new Array(20);//创建了一个容量为20的数组
console.log("arr4 "+arr4.length);
var arr5 = new Array(1,2,3,4);//创建了一个容量为4的数组
console.log("arr5 "+arr5.length);
三、数组元素的读写--索引法
数组的索引是从0开始,也就是说索引0代表第一个元素。
1.读取元素
var arr = [1,'abcd',true,20.5,'123'];
var a1 = arr[1];
console.log(a1);//提取数组第一个元素
console.log(arr[arr.length - 1]);//提取数组最后一个元素
//数组越界
console.log(arr[5]);//undefined
//打印数组中每一个元素
//数组的遍历
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
注:当使用索引访问不存在的元素的时候,称之为数组越界,值为undefined
2.修改元素
var arr = [1,'abcd',true,20.5,'123'];
//修改数组的某个元素
arr[0] = 10;
arr[1] = 20;
console.log(arr);
3.添加元素
var arr1 = [];
//向数组中添加元素
arr1[0] = 'abc';
console.log(arr1);
arr[5] = 'hello';
console.log(arr);
var arr2 = [];
//循环向数组中添加元素
for (var i = 0; i < 100; i++) {
arr2[i] = i+1;
}
console.log(arr2);
注:数组中没有这个元素就是添加,有就是修改
四、获取数组的长度
数组的length属性非常有特点:他不是只读的。可以通过数组的length属性向数组的末尾扩大数组的容量,或者从数组末尾移除数组元素。
var arr = [1,2,3,4,5,6,7,8,9,10];
//1.获取数组的长度
console.log("数组的长度"+arr.length);
//2.js的数组,可以通过修改length的值,来修改数组的容量
arr.length = 8;
console.log(arr);
arr.length = 20;
console.log(arr);
五、数组常用的方法
1、arr.push(v1,v2...)
描述:向数组末尾添加一个或者多个数组元素
参数:需要添加的数组元素
返回值:数组的长度
注意:原数组改变
var arr = [1,2,3,4,5];
console.log( arr.push("abc",11,22,33) );//9
console.log(arr);//[1, 2, 3, 4, 5, "abc", 11, 22, 33]
2、arr.pop()
描述:从数组的末尾删除一个数组元素
返回值:返回删除的元素
注意:原数组改变
console.log(arr.pop() );//9
console.log(arr);//[1, 2, 3, 4, 5, "abc", 11, 22]
3、arr.unshift(v1,v2...)
描述:向数组的头部插入元素
参数:需要插入的值
返回值:数组的长度
注意:原数组改变
arr.unshift(100,200,300);
console.log(arr);//[100, 200, 300,1, 2, 3, 4, 5, "abc", 11, 22]
4、arr.shift()
描述:删除数组的第一个元素
参数:删除掉的元素
注意:原数组改变
arr.shift()
console.log(arr);//[200, 300,1, 2, 3, 4, 5, "abc", 11, 22]
5、arr.join("+")
描述:将数组的值连接成字符串
参数:字符串
返回值:拼接成的字符串
console.log(arr.join('*'));
//200*300*1*2*3*4*5*abc*11*22
6、arr.reverse()
描述:将数组的数组元素倒置
返回值:返回原来的数组
注意:元数组改变
console.log( arr.reverse() );
//[22, 11, "abc", 5, 4, 3, 2, 1, 300, 200]
7、arr.concat(v1,v2,v3...)
描述:创建一个新数组,新数组的元素是arr数组的全部元素,再加上参数中的元素
参数:可以使数组元素,也可以使数组
返回值:新数组
console.log( arr.concat(true,false,["aa","bb"]) );
console.log(arr);//[22, 11, "abc", 5, 4, 3, 2, 1, 300, 200, true, false, "aa", "bb"]
8、arr.slice(start,end)
描述:返回数组中一部分
参数:开始的位置,结束的位置
返回值:数组的一部分
注意:start的值必须大于1并且不能小于end的值
console.log( arr.slice(0,58) );
console.log(arr);//[22, 11, "abc", 5, 4, 3, 2, 1, 300, 200]
9、arr.splice(index,howmany,v1,v2...)
描述:向数组中添加元素或者从数组中删除元素
参数:index--必需,规定添加或者删除元素的地方。赋值表示从数组末尾开始
howmany--必需,要删除项目的个数,如果值为0,则不会删除元素
v1--可选,向数组中添加新的项目
返回值:改变之后的数组
var arr2 = [0.1,0.2,0.3];
//1.向0.2之前添加一个0.05
arr2.splice(1,0,0.05);
console.log(arr2);
//[0.1, 0.05, 0.2, 0.3]
//2.删除掉0.05
arr2.splice(1,1,"abc","abd","cbd");
console.log(arr2);
//[0.1, "abc", "abd", "cbd", 0.2, 0.3]
//3.删除多个数组元素
arr2.splice(1,3);
console.log(arr2);
//[0.1, 0.2, 0.3]
10、indexOf(v1)
描述:从数组头部查找v1,找到的话返回索引
参数:要查找的数值
返回值:索引,没有找到返回-1
var arr3 = [100,200,200,300,200,400,500,100,200];
console.log( arr3.indexOf(200));//1
11、lastIndexOf(v2)
描述:从数组尾部查找v1,找到的话返回索引
参数:要查找的数值
返回值:索引,没有找到返回-1
var arr3 = [100,200,200,300,200,400,500,100,200];
console.log( arr3.lastIndexOf(200) );//8
六、排序
冒泡排序 (Bubble Sort)
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一轮,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
<script>
//数组中有10个元素都是数字,从小到大排序
var arr = [2,4,3,6,2];
/*
冒泡排序:
比较相邻的两个元素,把大的值放在后面
* 原数组:2 4 3 6 1
* 第一层循环: 遍历数组
* 第一次:
* 第二层循环:
* 第一次:2 4 ----不动 2 4 3 6 1
* 第二次:4 3 ---- 3和4交换位置 2 3 4 6 1
* 第三次:4 6 ---- 不动 2 3 4 6 1
* 第四次:6 1 ---- 6和1交换位置 2 3 4 1 6
* 第二次:
* 第二层循环:
* 第一次:2 3 ---- 不动 2 3 4 1 6
* 第二次: 3 4 ---- 不动 2 3 4 1 6
* 第三次: 4 1 ---- 4和1交换位置 2 3 1 4 6
* 第四次:不需要
* 第三次:
* 第二层循环:
* 第一次:2 3 ---- 不动 2 3 1 4 6
* 第二次:3 1 ---- 3和1交换位置 2 1 3 4 6
* 第三次:不需要
* 第四次:
* 第二层循环;
* 第一次:2 1 --- 2和1交换位置 1 2 3 4 6
* 第二次:不需要
* */
//第一层循环
for (var i = 0; i < arr.length - 1; i++) {
//第二层循环
for (var j = 0; j < arr.length - 1 - i; j++) {
//相邻的两个元素比较
if(arr[j] > arr[j + 1]){
//如果第一个比第二个大,交换位置
//把这两个元素的值互换
var tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
console.log(arr);
</script>
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
//数组中有10个元素都是数字,从小到大排序
var arr = [2,4,3,6,1];
/*
选择排序:
每一个元素和后面所有的元素比较,把最小的放在前面
* 原数组:2 4 3 6 1
* 第一层循环: 遍历数组
* 第一次:arr[0] = 2
* 第二层循环:
* 第一次:2 4 ---- 不动
* 第二次:2 3 ---- 不动
* 第三次:2 6 ----- 不动
* 第四次:2 1 ----- 2 和1交换位置 1 4 3 6 2
* 第二次:arr[1] = 4
* 第二层循环:
* 第一次:4 3 --- 4 和3交换位置 1 3 4 6 2
* 第二次:3 6 ---- 不动
* 第三次:3 2 ---- 3和2交换位置 1 2 4 6 3
*
* 第三次:arr[2] = 4
* 第二层循环:
* 第一次:4 6 ---- 不动
* 第二次:4 3 ---- 4和3交换位置 1 2 3 6 4
* 第四次:arr[3] = 6
* 第二层循环:
* 第一次:6 4 --- 6和4交换位置 1 2 3 4 6
*
* */
//第一层循环
for (var i = 0; i < arr.length - 1; i++) {
//第二层循环
for (var j = i + 1; j < arr.length; j++) {
//1 --- 5
//当前第一层循环的元素arr[i]和后面的每一个元素比较
if(arr[i] > arr[j]){
//如果比后面的值大,交换两个元素的值,小值在前面
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
</script>