1.数组的常用方法
1.join(连接字符):将数组元素转换成字符串
问题:将字符串转换成数组,如:‘11-22-33-44-55’
var arr=[11,22,33,44,55]
var s1=arr.join('-') //数组元素之间用'-'连接
var s2=arr.join()//默认情况(不带参数),元素之间用','连接
console.log(s1)
console.log(s2)
2.push()函数和pop()函数:
push()函数在数组的末尾添加一个或多个元素
pop()函数:从数组的末尾删除一个元素,函数返回被删除的元素,无需传参
var arr ["Lily","lucy","Tom"];
var count = arr.push("Jack","sean");
console.log(count);//5
console.log(arr);/["Lily","lucy","Tom","Jack","Sean"]
var item = arr.pop();
console.log(item);//sean
console.log(arr);//["Lily","lucy","Tom","Jack"]
3.shift()函数和unshift()函数:
shift()函数:从数组的首部删除一个元素,函数返回被删除的元素
unshift()函数:在数组的首部插入一个或多个元素
var arr = ["Lily","lucy","Tom"];
var count = arr.unshift("Jack","Sean");
console.log(count);//5
console.log(arr);//["Jack","sean","Lily","lucy","Tom"]
var item = arr.shift("Jack");
console.log(item);//Jack
console.log(arr);/["sean","Lily","lucy","Tom"]
4.sort():排序函数。默认的是从小到大。若需要降序排序,需要自己写比较函数。它是在原数组上排
var arr1 = ["a","d","c","b"];
console.log(arr1.sort());//["a","b","c","d"]
var arr2= [13,24,51,3];
console.log(arr2.sort());//[13,24,3,51]
console.log(arr2);//[13,24,3,51](原数组未改变)
5.reverse()函数:将数组元素颠倒顺序
var arr=[13,24,51,3]:
console.log(arr.reverse());//[3,51,24,13]
conso1e,1og(arr);//[3,51,24,13](原数组改变)
6.concat()函数:连接两个或多个数组
var arr=[1,3,5,7]:
var arrcopy=arr.concat(9,[11,13]);
conso1e.1og(arrCopy);//[1,3,5,7,9,11,13]
conso1e,1og(arr);//[1,3,5,7](原数组未被修改)
7.slice()函数:切片函数。从原数组中截取部分元素组成新的数组。在截取时需要指定开始位置(开始下标)和结束位置结束下标)
(1)slice(索引):截取数组中从给定索引到末尾的所有元素
(2)slice(索引1,索引2):截取数组中索引1到索引2之间的元素(包含索引1,不包含索引2)
索引:可以为负数,若是负数表示从后向前找元素
var arr=[1,3,5,7,9]
var a1=arr.slice(1)//'1'是下标,表示从下标为1的位置开始到数组数末尾全部被截取
console.log(a1) //3 5 7 9
var a2 = arr.slice(1,3) //截取下标1~3之间的元素,包含下标为1的元素,不包含下标为3的元素
console.log(a2) // 3 5
var a3= arr.slice(1,-2)//等价于s1ice(1,3),-2不是下标,表示倒数第二个元素
console.log(a3) // 3 5
var a4 arr.slice(-4,-2) //截取倒数第四个元素~倒数倒数第二个元素之间的元素
console.log(a4) // 3 5
8.splice(): 很强大的数组方法,它有很多种用法,可以实现删除、插入和替换。
var arr=[1,3,5,7,9,11]
//sp1ice(参数1,参数2):返回的删除的元素。第一个参数代表下标,第二个参数表示删除的项数。
var a5=arr.splice(1,3) //删除从下标1开始的连续3个元素
console.log(a5) // 3 5 7
console.log(arr) // 1 9 11
console.log(arr)
splice(参数1,参数2,参数3):
参数1:表示替换位置
参数2:表示项数(非0即为替换 ,0表示插入)
参数3:用于替换的新值
var arr=[1,3,5,7,9,11]
arr.splice(1,1,78) //替换 1 78 5 7 9 11
arr.splice(1,0,78) //插入 1 78 78 5 7 9 11
console.log(arr)
9.indexOf(元素):从左向右查找元素的位置。返回元素在数组中的下标(索引),返回-1表示没有找到
var arr=[12,25,33,12,89]
var index1 = arr.indexOf(12)/从左往右查找,返回找到的第一个12的下标
console.log(index1) //0
10.lastIndexOf(元素):从右向左查找元素的位置。返回元素在数组中的下标(索引),返回-1表示没有找到
var arr=[12,25,33,89]
var last_index=arr.lastIndexOf(1)
console.log(last_index) //-1
11.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 //返回下标对3取余等于0的元素
//return index % 3==0 || value>=8
})
console.log(temp) //1 4 7 10
//console.log(temp)//1 4 7 8 9 10
12.fill(值/变量):用给定的值或变量填充数组
var arr = new Array(5) //定义5个单元
arr .fill(1) //数组的5个单元中都是1
console.log(arr) //1,1,1,1,1
let k = 10
var arr = new Array(5)
arr .fill(k)
console.log(arr) //10,10,10,10,10
13.every(function(value){ //判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回 true return条件表达式
})
var arr = [1,2,3,4,5,6,7,8,9,10]
var falg = arr.every(function(value){ //参数value代表数组元素
return value <=10 //若数组中每一个元素都小于10,则返回true,否者返回false
})
console.log(flag) //true
14.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(flag) //true
console.log(flag1) //false
4. 二维数组
1、一维数组:通过一个下标就可以访问数组元素(数组元素只有一个下标)
2、二维数组:通过两个下标来确定一个数组元素(数组中的每个元素都有两个下标)由行和列组成的数组
3、定义方式:
(1)通过数组字面量'[ ]'定义:
let arr = [[1,2,3],[4,5,6],[7,8,9]] //定义一个3行3列的二维数组
console.log(arr)
输出:采用循环嵌套
//输出:采用循环嵌套
var str =''
let arr = [[1,2,3],[4,5,6],[7,8,9]]
for (let i= 0; i < arr.length; i++) {//外循环控制行数,arr.length表示arr数组的行数.i表示行下标
for (let j = 0; j < arr[i].length; j++) {//内循环:控制数组的列。arr[i].length表示i行的元素个数,j表示列下标
str =str +arr[i][j] +'\t'
}
str = str +'\n'
}
console.log(str)
(2)通过Array定义
let arr = new Array(
new Array(1,2,3),
new Array(4,5,6),
new Array(7,8,9)
)
4、二维数组元素的访问
(1)按行优先 --- 默认方式 数组名[ 行下标 ] [ 列下标 ]
(2)按列优先 数组名[ 列下标 ] [ 行下标 ]
5.练习
练习1:定义一个二维数组,输出该二维数组的最大值
let arr = new Array(new Array(1,2,3),
new Array(4,5,6),
new Array(7,8,9)
)
let max =arr[0][0] //假设二维数组的第一个元素是最大值
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
if (max<arr[i][j]) {
max =arr[i][j]
}
}
}
console.log(Max='',max)
练习2:定义一个二维数组,输出该二维数组的每行元素的最大值
var str = ''
let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for (let i = 0; i < arr.length; i++) {//外循环控制行数,arr.length表示arr数组的行数.i表示行下标
for (let j = 0; j < arr[i].length; j++) {//内循环:控制数组的列。arr[i].length表示i行的元素 个数,j表示列下标
str += arr[i][j] + '\t'
}
str += '\n'
}
console.log(str)
//求每行的最大值
for (let i = 0; i < arr.length; i++) {
let max = arr[i][0] //假定每行的第一个元素为最大值
for (let j = 1; j < arr[i].length; j++) {
if (max < arr[i][j]) {
max = arr[i][j]
}
}
console.log('第'+(i+1)+'行的最大值是:',max)
}
练习3:定义一个3*3二维数组,输出该数组每行元素之和、对角线元素之和
let arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
//输出该数组每行元素之和
for (let i = 0; i < arr.length; i++) {
let sum =0;
for (let j = 0; j < arr[i].length; j++) {
sum+=arr[i][j]
}
console.log('第' + (i + 1) + '行的元素之和:', sum)
}
//输出该数组对角线元素之和
let s1 = 0 //左上-右下对角线
let s2 = 0 //左下-右上对角线
for (let i = 0; i < arr.length; i++) {
s1 +=arr[i][i]
s2 +=arr[i][arr.length-i-1]
}
console.log('左上-右下对角线:', s1)
console.log('左下-右上对角线: ', s2)
练习4、计算斐波拉契数列的前20项之和
var arr = new Array();
arr[0] = 1;
arr[1] = 1;
let sum =2;
for (var i =2; i < 20; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
sum+=arr[i]
}
console.log(arr);
console.log(sum);