数组:内存中一块连续的存储单元,这些存储单元具有共同的名称、不同的索引(下标)
一、数组的声明:
(1)使用数组字面量:[ ]
eg : let a = [ ] //声明一个空数组;
(2) 使用Array对象声明数组:
eg :let a = new Array ( )声明一个空数组;
二、数组的属性:
length 表示数组元素的个数(数组的单元个数)
数组名.length
(1)、数组元素的索引:
从0开始到数组的单元个数减1
(2)、数组元素的访问:
数组名[索引]
三、数组的遍历:
不重复的访问数组的每个元素
(1)使用for循环遍历:
(2)使用for...in循环:
for(index in 数组名){
循环体语句
}
index:表示的是数组元素的索引
(3)使用for...of循环:
for( value of 数组名){
循环体语句
}
value:表示数组元素
(4)forEach循环遍历:
数组名.forEach(function(value,index){
函数体语句
})
value:表示数组元素
index:数组元素的下标
数组元素的下标:数组元素在数组中的位置编号(从0开始到数组的长度减1)
(5)使用map函数遍历数组:
实际是对数组的过滤。返回一个新的数组,原数组不变
let 新数组名 = 原数组名.map(function(item){ //item表示数组元素
函数体语句
})
四、数组的排序:
冒泡排序:
数据两两比较,如果发现存在大小关系,就进行交换。
五、数组的常用方法(内置方法:直接使用,只需按要求传递对应的参数)
1、join(连接字符):作用是将数组中的元素通过给定的连接字符连成一个字符串
var arr1 = [1,3,5,6,7,9,0];
var arr2 = arr1.join(",");//用','号连接成一个字符串
console.log(arr2);//1,3,5,6,7,9,0
2、push(值/变量):从数组的末尾向数组添加元素
var arr1 = [1,3,5,6,7,9,0];
arr1.push(10);
console.log(arr1);//[1,3,5,6,7,9,0,10];
3、pop():从数组的末尾删除元素,一次只删除一个,返回的是被删除的元素。无需传参
var arr1 = [1,3,5,6,7,9,0];
var arr2 = arr1.pop();
console.log("删除的元素为"+arr2);//0
console.log("删除元素后数组为"+arr1);//1,3,5,6,7,9
4、shift():从数组的首部删除元素
var arr1 = [1,3,5,6,7,9,0];
var arr2 = arr1.shift();
console.log("删除的元素为"+arr2);//1
console.log("删除元素后数组为"+arr1);//3,5,6,7,9,0
5、unshift(值/变量):从数组的首部插入元素
// 插入值
var arr1 = [1,3,5,6,7,9,0];
arr1.unshift(11);
console.log("插入元素后数组为"+arr1);//11,1,3,5,6,7,9,0
// 插入变量
let i=10
var arr1 = [1,3,5,6,7,9,0];
arr1.unshift(i);
console.log("插入元素后数组为"+arr1);//10,1,3,5,6,7,9,0
6、sort():排序函数。默认的是从小到大。若需要降序排序,需要自己写比较函数。它是在原数组上排序
// 用法一:
var arr1 = [1,3,5,6,7,9,0];
arr1.sort();
console.log(arr1);//0,1,3,5,6,7,9
// 用法二:
var arr1 = [1,3,5,6,7,9,0];
var arr2 = arr1.sort(function(a,b){
return a-b;//默认升序:从小到大 降序:b-a从大到小
})
console.log(arr2);//0,1,3,5,6,7,9
7、reverse():将数组元素颠倒顺序
var arr1 = [1,3,5,6,7,9,0];
arr1.reverse();
console.log(arr1);//[0, 9, 7, 6, 5, 3, 1]
8、concat():连接两个或多个数组
var arr1 = [1,3,5,6,7,9,0];
var arr2 = [2,4,8,10,11,12];
var arr3 = arr1.concat(arr2);
console.log(arr3);//[1,3,5,6,7,9,0,2,4,8,10,11,12]
9、slice():切片函数:从原数组中截取部分元素组成新的数组。在截取时需要指定开始位置(开始下标)和结束位置(结束下标)
var arr = [1,3,5,7,9,11]
var a1 = arr.slice(1) //'1'是下标,表示从下标为1的位置开始到数组末尾全部截取
console.log(a1)
var a2 = arr.slice(1,3) //截取下标1~3之间的元素,包含下标为1的元素,不包含下标为3的元素
console.log(a2)
var a3 = arr.slice(1,-2) //等价于slice(1,3),-2不是下标,表示倒数第二个元素
console.log(a3)
var a4 = arr.slice(-4,-2) //截取倒数第四个元素~倒数倒数第二个元素之间的元素
console.log(a4)
10、splice():可以实现对数组元素的插入、删除和替换。
(1)删除元素:
splice(参数1,参数2):返回的删除的元素。第一个参数代表下标,第二个参数表示删除的项数。
var a5 = arr.splice(1,3) //删除从下标1开始的连续3个元素
console.log(a5)
console.log(arr)
(2)替换/插入元素:
splice(参数1,参数2,参数3):
参数1:表示替换位置
参数2:表示项数(非零为替换,0表示插入)
参数3:用于替换的新值
var arr = [1,3,5,7,9,11]
arr.splice(1,1,89) //替换
arr.splice(1,0,78) //插入
console.log(arr)
11、indexOf(元素):从左向右查找元素的位置。返回元素在数组中的下标(索引),返回-1表示没有找到
var arr = [10,25,33,11,89]
var index1 = arr.indexOf(12) //从左往右查找,返回找到的第一个12的下标
console.log(index1)
12、lastIndexOf(元素):从右向左查找元素的位置。返回元素在数组中的下标(索引),返回-1表示没有找到
var arr = [12,25,33,12,89]
var last_index = arr.lastIndexOf(12)
console.log(last_index)
13、filter(function(value,index) {
函数体语句
})
可以实现对数组元素的"过滤",返回的元素构成一个新的数组
var arr = [1,2,3,4,5,6,7,8,9,10]
var temp = arr.filter(function(value,index){ //value:表示数组元素,index:表示数组元素的下标
return index % 3==0 || value>=8 //返回下标对3取余等于的元素
})
console.log(temp)
14、fill(值/变量):用给定的值或变量填充数组
var arr = new Array(5)
arr.fill(1) //数组的5个单元中都是1
console.log(arr)
15、every(function(value) { // 判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回 true
return 条件表达式
})
var arr = [1,2,3,4,15,6,7,8,9,10]
var flag = arr.every(function(value){ //参数value代表数组元素
return value <=10 //若数组中每个元素都小于等于10,则返回true,否则返回false
})
console.log(flag)
16、includes() :判断一个数组中是否包含一个指定的值
var arr = [45,78,89,55,46,31]
var flag = arr.includes(89) //判断arr数组中是否包含89,若有返回true,没有就返回false
var flag1 = arr.includes(89,3)//从下标为3的元素开始查找,若有返回true,没有就返回false
console.log(flag1)
17、findIndex(function(value){ //返回符合条件的元素的索引(下标)
return 条件表达式
}):
//已知数组(12,23,26,45,58,60)是有序的,输入一个数x,将它插入到数组中,保证数组仍然是有序的
var arr = [12,23,26,45,58,60]
var x = 55
var insert_index = arr.findIndex(function(value){ //value:表示数组元素
return value>=x //返回数组中第一个大于x的元素的下标
})
arr.splice(insert_index,0,x)
console.log(arr)
六、数组总结:
(1)数组的作用:是一种数据的存储结构。用来存储程序中的数据
(2)数组的定义方式:
a、字面量:[ ]
b、Array对象:new Array()
(3)数组的内置方法(函数):数据的插入/删除、切片、过滤、查找
(4)与数组相关的算法:排序算法(冒泡)