关于JS中定义二维数组的问题

nightnight12138 2018-08-17 04:31:48
根据给定的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的问题在哪里
...全文
371 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
verejava 2018-08-20
  • 打赏
  • 举报
回复
Javascript 基础 之 数组

http://www.verejava.com/?id=17234523859729
jingchao1998 2018-08-19
  • 打赏
  • 举报
回复
额(⊙o⊙)…,不好意思,刚才发的代码有点问题,第二个还是不行这回可以了,
先看效果我弄完的效果


然后贴代码
[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)
}
jingchao1998 2018-08-19
  • 打赏
  • 举报
回复
你的代码我复制下来加了点东西运行了一下,你第二个方法没有出来结果是因为,你第一层for循环(for(var i in m) ),这里写的有问题,
这个 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);
}


你写的从那个,是遍历一个数组的长度,那个长度就就是个数字,而这个方法是用来遍历数组的,你那样写实际上他的两层循环一次都没有执行,而你的到的数组只是你实例化的时候生成的空数组而已。
讨厌走开啦 2018-08-17
  • 打赏
  • 举报
回复
for in 用来遍历对象的属性,m是个数值,没有属性,所以实际for in没有执行。

87,838

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧