一、数组
数组:是内存中一块连续的存储单元
1、创建数组
创建数组的两种常见方式的用法:
- 使用‘new Array()”创建数组。
- 使用“[]”字面量来创建数组。
<script>
//使用new Array()创建数组
var arr1 = new Array();
//使用字面量来创建数组
var arr1 = [];
</script>
2、访问数据元素
使用索引来访问数组中的元素,索引是一个数字, 从0开始。
⭐️示例代码:
<script>
var arr= ['苹果','橘子','香蕉','桃子']
console.log(arr[0]);
//输出结果:苹果
console.log(arr[1]);
//输出结果:橘子
console.log(arr[2]);
//输出结果:香蕉
console.log(arr[3]);
//输出结果:桃子
console.log(arr[4]);
</script>
⭐️输出结果:
3、数组遍历
- 数组遍历是将数组中的元素全部访问一遍,可以利用for循环来实现,在for循环中让索引从0开始自增。
- 如果数组元素比较多时,计算数组元素的个数不太方便,这时候可以利用“数组名.length”来快速地获取数组长度。
⭐️示例代码:
<script>
var arr=new Array(5)//表示定义一个具有5个存储单元的数组
arr[0]='red'
arr[1]=123
arr[2]='ccc'
arr[3]='ddd'
arr[4]='eee'
for(var i=0;i<arr.length;i++){
console.log(arr[i])
}
</script>
⭐️输出结果为:
4、数组相关小练习
😄示例1:找出数组中的最大值。
①代码段如下:
<script>
// 找数组中的最大值
var num=[45,78,32,11,56,99,27]
var max=num[0]//假定数组第一个值是最大值
for(let i=0;i<num.length;i++){
if(max<num[i]){
max=num[i]
}
}
console.log('max=',max)
</script>
②输出结果:
😄示例2:找出数组中大于等于10的元素,存放到新数组中。
①代码段如下:
<script>
//找出数组中大于等于10的元素,存放到新数组中
var s=[0,1,5,0,12,78,34,6,7]
var arr1=[]//空数组
var j=0//是arr1数组的索引
for(var i=0;i<s.length;i++){
if(s[i]>=10){
arr1[j]=s[i]
j++
}
}
console.log(arr1)
</script>
②输出结果:
😄示例3:找一组数据,删除数组中等于0的元素
①代码段如下(有两种方法,方法二的空间复杂度低于方法一,更加高效):
<script>
//1.找一组数据,删除数组中等于0的元素
var arr=[0,1,5,0,12,78,34,6,7]
var newArr=[]
for(var i=0;i<arr.length;i++){
if(arr[i]!=0){
newArr[newArr.length]=arr[i]
}
}
console.log(newArr)
//2.在原数组上操作,直接删除0
var arr=[0,1,5,0,12,78,34,6,7]
for(var i=0;i<arr.length;i++){
if(arr[i]==0){
for(var j=i;j<arr.length;j++)
{
arr[j]=arr[j+1]
}
}
}
console.log(arr)
</script>
②输出结果:
😄示例4:反转数组元素
①代码段如下(有两种方法,方法二的空间复杂度低于方法一,更加高效):
<script>
// 1.创建一个新数组,使其原数组元素进行反转
var arr=['red' ,'green','pink','black','yellow']
var newArr=[]
var j=0
for (var i=arr.length-1;i>=0;i--){
newArr[j]=arr[i]
j++
}
console.log(newArr)
// 2.在原数组上将原数组元素进行反转
var arr=['red','green','pink','black','yellow']
var i=0;//第一个元素的下标
var j=arr.length;//最后一个元素的下标
while(i<j){
var temp=arr[i]
arr[i]=arr[j]
arr[j]=temp
i++
j--
}
console.log(arr)
</script>
②输出结果:
二、二维数组
二维数组:通过两个下标(索引)来确定一个元素。
1、创建方式
(1)使用new Array()创建
⭐️①代码段:
// 第一种创建方法
var info=new Array(
new Array('刘备','男',32),//第一行,逗号不能忘
new Array('关羽','男',28),//第二行,逗号不能忘
new Array('张飞','男',27)//第三行
)
console.log(info)
⭐️②输出结果:
(2)通过’[ ]'创建
⭐️①代码段:
// 第二种创建方法
var info=[
['刘备','男',32],
['关羽','男',28],
['张飞','男',27]
]
console.log(info)
⭐️②输出结果
以上两种创建方式都可以,然后加上下面这条代码段,可以排列称为三行三列的二维数组。
①代码段:
var str=''
for(var i=0;i<info.length;i++){//外循环:代表二位数组的行下标,info.length表示行数
for(var j=0;j<info[i].length;j++){//内循环:表示数组列下标,info[i].length表示i行的元素
str += info[i][j]+'\t'
}
str += '\n'//打印二维数组时,在每行的末尾添加换行符
}
console.log(str)
②输出结果:
2、访问二维数组元素
数组名[下标1][下标2] ------默认:按行优先,'下标1’是行下标,'下标2’是列下标。
3、二维数组小练习
😄 (1)求3*4的二维数组的每行元素之和
⭐️①代码段如下:
var arr=[
[15,25,4,59],
[11,33,41,26],
[22,87,5,17]
]
console.log(arr)
for(var i=0;i<arr.length;i++){
var sum=0//这是为了防止全部元素相加,每次内循环一次,sum清零,这样就是每行元素之和
for(var j=0;j<arr[i].length;j++){
sum += arr[i][j]
}
console.log('第'+(i+1)+'行元素之和=',sum)
}
⭐️②输出结果为:
😄 (2)求3*4的二维数组的每列元素之和
⭐️①代码段如下:
var arr=[
[15,25,4,59],
[11,33,41,26],
[22,87,5,17]
]
console.log(arr)
for(var i=0;i<arr[0].length;i++){//外循环;表示列下标,
//这里的arr[0].length是用来计算行的列数,因为每行的列数都一样,所以常量可以赋值为0,1,2
var sum=0
for(var j=0;j<arr[0].length-1;j++){//内循环;表示行下标,arr[0].length-1是用来计算行的行数
sum += arr[j][i]
}
console.log('第'+(i+1)+'列元素之和=',sum)
}
⭐️②输出结果为:
😄 (3)求3*3的二维数组的对角线元素之和
⭐️①代码段如下:
var a=[
[2,3,4],
[4,5,6],
[7,8,9]
]
var sum1=0
var sum2=0
for(var i=0;i<a.length;i++){
sum1+=a[i][i]
sum2+=a[i][a.length-i-1]
}
console.log('正对角线和为',sum1)
console.log('反对角线和为',sum2)
⭐️②输出结果为:
😄 (4)输入一个数,将数插入到数组里,是数组还是有序的
⭐️①代码段如下:
<script>
var arr=[12,23,26,45,58,60,null]
var num=parseInt(prompt('请输入要插入的数:'))
var index=0
// 1.遍历数组,寻找插入的位置
for(var i=0;i<arr.length;i++){
if(arr[i]>num){
index=i;
break
}
}
//2.将插入位置以后的元素依次向后移动
for(var j=arr.length-1;j>index;j--){
arr[j]=arr[j-1]
}
//3.将元素放入相应的位置
arr[index]=num
console.log(arr)
</script>
⭐️②输出结果为:
😄 (5)输出杨辉三角形
⭐️①代码段如下:
var info=new Array(7)//创建数组,有七个单元,也就是七行
for(var i=0;i<info.length;i++){
info[i]=new Array(7)//每行又创建有七个单元,也就是七列
}
//1.对二维数组进行初始化;第一列和对角线全部置为1
for(var j=0;j<info.length;j++){
info[j][j]=1;//对角线元素为1
info[j][0]=1;//第一列元素为1
}
//2.对二维数组正对角线左边的元素进行运算。
for(var i=2;i<info.length;i++){//外循环,行下标
for(var j=1;j<i;j++){//列下标
info[i][j]=info[i-1][j-1]+info[i-1][j]
}
}
//3.输出二维数组
var str=''
for(var i=0;i<info.length;i++){
for(var j=0;j<=i;j++){
str+=info[i][j]+'\t'
}
str+='\n'
}
console.log(str)
⭐️②输出结果为:
😄 (6)求1!+2!+…+10!=?
⭐️①代码段如下:
var sum=0;//求和
for(var i=1;i<=10;i++){
var s=1//求当前i的阶乘
for(var j=1;j<=i;j++){
s=s*j
}
sum+=s//阶乘的和
}
console.log('sum=',sum)
⭐️②输出结果为:
😄 (7)二维数组的转置
⭐️①代码段如下:
var arr=[
['a','b','c'],
['d','e','f'],
['g','h','i'],
['j','k','l']
];
var res=[]
for(var i=0;i<arr[0].length;i++){//外循环:变量i是arr数组的列下标,也是res数组的行下标
res[i]=[]
for(var j=0;j<arr.length;j++){//内循环:变量j是arr数组的行下标,也是res数组的列下标
res[i][j]=arr[j][i]
}
}
console.log(res)var arr=[
['a','b','c'],
['d','e','f'],
['g','h','i'],
['j','k','l']
];
var res=[]
for(var i=0;i<arr[0].length;i++){//外循环:变量i是arr数组的列下标,也是res数组的行下标
res[i]=[]
for(var j=0;j<arr.length;j++){//内循环:变量j是arr数组的行下标,也是res数组的列下标
res[i][j]=arr[j][i]
}
}
console.log(res)
⭐️②输出结果为: