根据给定的m行n列的二维数组grid,定义一个m行n列的二维数组a。
写法1:
m=grid.length;
n=grid[0].length;
var a=new Array();
for(var i=0;i<m;i++) {
a[i]=new Array();
for(var j=0;j<n;j++){
a[i][j];
}
}写法2:
m=grid.length;
n=grid[0].length;
var a=new Array();
for(var i in m) {
a[i]=new Array();
for(var j in n){
a[i][j];
}
}假设m,n都是3,写法1的结果a=[[],[],[]],写法2则是a=[]
为什么会出现这个问题啊,写法2的问题在哪里
写法1:
m=grid.length;
n=grid[0].length;
var a=new Array();
for(var i=0;i<m;i++) {
a[i]=new Array();
for(var j=0;j<n;j++){
a[i][j];
}
}写法2:
m=grid.length;
n=grid[0].length;
var a=new Array();
for(var i in m) {
a[i]=new Array();
for(var j in n){
a[i][j];
}
}假设m,n都是3,写法1的结果a=[[],[],[]],写法2则是a=[]
为什么会出现这个问题啊,写法2的问题在哪里
这个 for(var a in b) ,这种写法,你可以理解为 以a为键,在b中循环遍历,a就类似于a=0;a<3;a++一样。 window.onload=function(){
test1();
test2();
};
var grid = [[1,2,3],[4,5,6],[7,8,9]];
//方法一
function test1() {
m = grid.length;
n = grid[0].length;
var a = new Array();
for(var i = 0; i < m; i++) {
a[i] = new Array();
for(var j = 0; j < n; j++) {
a[i][j];
}
}
console.log("测试方法一");
console.log(a);
}
//方法二
function test2() {
m = grid.length;
n = grid[0].length;
var a = new Array();
for(var i in grid) {
a[i] = new Array();
for(var j in n) {
a[i][j];
}
}
console.log("测试方法二");
console.log(a);
}
你写的从那个,是遍历一个数组的长度,那个长度就就是个数字,而这个方法是用来遍历数组的,你那样写实际上他的两层循环一次都没有执行,而你的到的数组只是你实例化的时候生成的空数组而已。
先看效果我弄完的效果
然后贴代码
[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/1.gif]window.onload=function(){
test1();
test2();
};
var grid = [[1,2,3],[4,5,6],[7,8,9]];
//方法一
function test1() {
console.log("测试方法一");
m = grid.length;
n = grid[0].length;
var a = new Array();
for(var i = 0; i < m; i++) {
a[i] = new Array();
for(var j = 0; j < n; j++) {
a[i][j] = (i+1)*(1+j);
}
console.log(a[i]);
}
}
//方法二
function test2() {
console.log("测试方法二");
m = grid.length;
n = grid[0].length;
var a = new Array();
for(var i in grid) {
a[i] = new Array();
for(var j in grid[i]) {
a[i][j] = (i)*(j);
}
console.log(grid[i]);
}
console.log(a)
}