二维数组的本质:数组中的元素又是数组
var arr = [[1,2,4,6],[2,4,7,8],[8,9,10,11],[9,12,13,15]]//这就是一个二位数组<br>arr[2][3]; // 11 注意:表示第三列第4行所在的元素。角标从0开始
![5ca6c6084bbfab8558a3ebcaea1772bd.png](https://i-blog.csdnimg.cn/blog_migrate/6d18884f8328535c5df95e6c560e7ecc.jpeg)
初始化
var arr = [[1,2],['a','b']];
console.log(arr[1][0]); //a 第2列第1行所在的元素
var arr = new Array(new Array(1,2),new Array("a","b"));
console.log(arr[1][0]);
var arr = new Array(); //先声明一维
for(var i=0;i<5;i++){ //一维长度为5
arr[i]=new Array(i); //在声明二维
for(var j=0;j<5;j++){ //二维长度为5
arr[i][j]=i;
}
}
![ffabfe4ff3f5010e482f9e741812111a.png](https://i-blog.csdnimg.cn/blog_migrate/44d6f747fd888d461ff6674c59ee7c26.jpeg)
![c814d448984783f99f651b4a74e93c8d.png](https://i-blog.csdnimg.cn/blog_migrate/159f198ed1bb67e477df9f9059f1400c.jpeg)
![98fd0d3da7d88368a7dac293e0841565.png](https://i-blog.csdnimg.cn/blog_migrate/fa1bb0287a290c88014e1d535ebd4e4e.jpeg)
例题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的二维数组和一个整数,判断数组中是否含有该整数
我们首先想到的是遍历每个元素
![9462d8a2d37f6b1d3dcbe600707cc6b0.png](https://i-blog.csdnimg.cn/blog_migrate/1466325f5828adbcea3563e681ce2664.jpeg)
但是我们可以这样
var arr = [[1,2,4,6],[2,4,7,8],[8,9,10,11],[9,12,13,15]];
//规律:首先选取数组中右上角的数字,如果该数字=要查找的数字,查找过程结束;如果该数字>要查找的数字,剔除这个数字所在的列;
//如果该数字<要查找的数字,剔除这个数字所在的行。
function find(arr,num){
if(num==null || num==''){
console.log(num+" is null");
return;
}
while(arr.length){
var temp = arr[arr.length-1][0];
if(num == temp){
console.log(num+"is finded");
return temp;
}else if(temp>num){
arr.pop();
if(arr.length == 1){
console.log(num + " is not exists,"+num+" is less the minValue");
return;
}
}else{
for(var i=0;i<arr.length;i++){
if(arr[i].length ==1){
console.log(num + " is not exists,"+num+" is more than the maxValue");
return;
}
arr[i].shift();
}
}
}
}
var result = find(arr,18);
console.log(result);
二维数组转为一维数组
![135030efb0b8e44151ee3fc3493ba6b1.png](https://i-blog.csdnimg.cn/blog_migrate/ca55dd629f329520841c989029c90232.jpeg)