2016-08-01 37 views
1

我一直在尝试在javascript中构建二维数组,但没有取得多大成功。我从数据库中提取一些数据,然后我想将一些字段合并到二维数组中,以便在代码的其他地方使用它。理想的情况是什么,我想落得是:在JavaScript中构建2D数组

mapLocs = [ 
    ['name a','location a',1], 
    ['name b','location b',2], 
    ['name c','location c',3] 
] 

这里是我使用建mapLocs数组的代码:

for(i = 0;i < phtLen;i++){ 
     var x = i + 1; 
     var myLocs = new Array(myPhotogs[i].phtName,myPhotogs[i].phtLoc,x); 
     console.log(myLocs); 
     mapLocs[i] = new Array(myLocs); 
     } 
    } 

,这是相当多,我从读书收集的方法类似的问题。 console.log()输出一个由我想要的三个元素组成的数组,但如果我试图访问mapLocs,它似乎不像我所预期的那样由三个数组组成,但是三个元素都由三个元素组成在myLoc数组如果这是有道理的?所以:

console.log(mapLocs[0][0]); // Joe Bloggs, SW1A 1AA, 1 

,我期待只是 '李四' 和

console.logs(mapLocs[0][1]); // undefined 

我在做什么错?

+2

尝试更改'mapLocs [i] = new Array(myLocs);'到'mapLocs [i] = myLocs;' –

+0

您也可以尝试'mapLocs [i] = [myPhotogs [i] .phtName,myPhotogs [i ] .phtLoc,x + 1]' – Rajesh

+0

啊!辉煌,这是一种享受!非常感谢! – Drum

回答

1

显式的新的Array()构造函数不接受一个数组并且创建一个与参数数组完全相同的新数组,但需要一个您希望包含在新数组中的参数列表。因此,在该行

mapLocs[i] = new Array(myLocs) 

mapLocs [I]实际上是被设定为

[[Joe Bloggs, SW1A 1AA, 1]] 

相反,你可以说

mapLocs[i] = myLocs.slice() 

将克隆myLocs,并将其放置在索引我在mapLocs,产生你想要的输出。

+0

我已经接受这是正确的,因为它是正确的(我试过了),但实际上我在原始帖子下的第一条评论中提出了这个建议。 – Drum

+0

无论如何,谢谢!很高兴你找到你的答案。 – ingleback