说到二维数组和多维数组前,我想先写一个斐波那列求和的例子.
需求:求斐波那契数列的前20个数之和,已知斐波那契数列的前两项都是1,从第三项开始,每一项都等于前两项之和 .
用代码实现一下,有详细注释:
<!-- 需求:求斐波那契数列的前20个数,已知斐波那契数列的前两项是1,从第三项开始,每一项都等于前两项之和 -->
<script>
const fibonacci=[]
// 把斐波那契数列的前两项给到了数组的第二和第三个位置,在js中,数组的第一位索引是0,在斐波那契数列中
//不存在0,所以直接略过.从第二位开始保存斐波那契数列中对应位置的元素
fibonacci[1]=1
fibonacci[2]=1
//需要数列的3-20位置上的数
for(let i=3;i<20;i++){
//用循环来处理,把数组中的前两位相加,结果赋值到当前位置的元素
fibonacci[i]=fibonacci[i-1]+fibonacci[i-2]
}
//循环迭代数组的各个元素
for (let i=0;i< fibonacci.length;i++) {
console.log(fibonacci[i]);
}
</script>
看下执行结果:
二维数组的简单例子
假如我们要记录数天内每小时的气温,我们可以用数组来保存数据,假如有两天的气温数据:
let averageTempDay1=[72,75,79,79,81,81]
let averageTempDay2=[81,79,75,75,73,72]
这个时候我们就可以用矩阵(二维数组),矩阵的行保存每天的数据,列对应每小时的数据.
let averageTemp=[]
averageTemp[0]=[72,75,79,79,81,81]
averageTemp[1]=[81,79,75,75,73,72]
js其实只支持一维数组,并不支持矩阵,但是我们可以用数组套数组,实现矩阵或任一多维数组,代码可以这么写:
<!-- day1 -->
averageTemp[0]=[]
//行 //列
averageTemp[0][0]=72
averageTemp[0][1]=75
averageTemp[0][2]=79
averageTemp[0][3]=79
averageTemp[0][4]=81
averageTemp[0][5]=81
<!-- day2 -->
averageTemp[1]=[]
averageTemp[1][0]=81
averageTemp[1][1]=79
averageTemp[1][2]=75
averageTemp[1][3]=75
averageTemp[1][4]=73
averageTemp[1][5]=72
现在可以迭代二维数组的元素,可以创建一个通用函数,来看一下详细代码:
function printMatrix(myMatrix) {
for (let i = 0; i < myMatrix.length; i++) {
for (let j = 0; j < myMatrix[i].length; j++) {
console.log(myMatrix[i][j]);
}
}
}
printMatrix(averageTemp)
console.log(printMatrix(averageTemp));
三维数组的简单例子
也可以用处理二维数组的这种方式处理三维数组,不过开发中还是二维数组比较常见.
假如我们要创建一个3*3*3的矩阵,每一格里包括矩阵的i(行),j(列)及z(深度)之和.
<!-- 创建一个3*3*3的矩阵,每一格里包括矩阵的i(行),j(列)及z(深度)之和 -->
<script>
const matrix3x3x3 = []
for (let i = 0; i < 3; i++) {
matrix3x3x3[i] = []//初始化每个数组
for (let j = 0; j < 3; j++) {
matrix3x3x3[i][j] = []
for (let z = 0; z < 3; z++) {
matrix3x3x3[i][j][z] = i + j + z
}
}
}
//输出矩阵的内容
for (let i = 0; i< matrix3x3x3.length; i++) {
for (let j = 0; j < matrix3x3x3[i].length; j++) {
for (let z = 0; z < matrix3x3x3[i][j].length; z++) {
console.table(matrix3x3x3[i][j][z]);
}
}
}
</script>
如果是3*3*3*3的矩阵,代码中就会用四层嵌套的for语句,以此类推.