二维数组
1、一维数组:数组元素只有一个下标(通过一个下标就可以定位数组中的元素)
2、二维数组:数组中的每个元素都有两个下标(由行和列组成的数组)
(1)定义:
a:通过字面量
var arr = [1,2,3],
[4,5,6],
[7,8,9]
(2)使用Array对象(来申明二维数组)
var arr = new Array(
new Array(1,2,3),
new Array(4,5,6),
new Array(7,8,9)
)
(2)二维数组元素的访问:数组名下标1默认情况下'下标1'代表行下标,'下标2'代表列下标
(3)输出:采用循环嵌套
var arr = [[1,2,3],
[4,5,6],
[7,8,9]]
var str = ''
for(let i = 0; i < arr.length; i++){ //外循环:控制数组行数 arr.length表示arr数组的行数 i:行下标
for(let j = 0; j < arr.length; j++){ //内循环:控制数组的列数 arr[i].length:i行的元素个数 j:列下标
str += arr[i][j] + '\t'
}
str += '\n'
}
console.log(str)
练习1:定义一个二维数组,输出该二维数组的最大值
var arr = [[7,23,98],
[ 6,18,20]
[77,88,66]]
for(let i = 0; i < arr.length;i++){
let max = arr[0]
for(let j = 0; j <arr[i].length;j++){
if(max < arr[i][j]){
max = arr[i][j];
}
}
console.log(max);
}
练习2:定义一个二维数组,输出该二维数组的每行元素的最大值
var arr = [[7,23,98,77],[ 6,18,20,99],[77,66,55,88]]
for(let i = 0; i < arr.length;i++){
let max = arr[0][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二维数组,输出该数组每行元素之和、对角线元素之和
var arr = [[7,23,98],
[6,18,20],
[77,88,66]]
for(let i=0;i<arr.length;i++){
let allNum = 0
for(let j=0; j < arr[i].length;j++){
allNum += arr[i][j]
}
console.log('第'+ (i+1 )+'行的和为:'+ allNum)
}
//对角线元素之和
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项之和 1 1 2 3 5 8 13 21 34 55.....
let a1 = 1; a2 = 1
let sum = a1 + a2
for(let i = 3; i <= 20;i++){
let num = a1 + a2
a1 = a2
a2 = num
sum += num
}
console.log('sum=',sum)