在Javascript中构建2D数组

在Javascript中构建2D数组,javascript,arrays,Javascript,Arrays,我一直在尝试用javascript构建一个2D数组,但没有太大成功。我从数据库中提取一些数据,然后我想将一些字段合并到一个2D数组中,以便在代码中的其他地方使用它。理想情况下,我想要的结果是: mapLocs = [ ['name a','location a',1], ['name b','location b',2], ['name c','location c',3] ] 下面是我用来构建mapLocs数组的代码: for(i = 0;i < pht

我一直在尝试用javascript构建一个2D数组,但没有太大成功。我从数据库中提取一些数据,然后我想将一些字段合并到一个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.logs(mapLocs[0][1]); // undefined
我做错了什么?

显式new Array()构造函数不获取数组并使新数组与参数数组相同,而是获取希望包含在新数组中的参数列表。那就排队吧

mapLocs[i] = new Array(myLocs)
mapLocs[i]实际上被设置为

[[Joe Bloggs, SW1A 1AA, 1]]
相反,你可以说

mapLocs[i] = myLocs.slice()

这将克隆myLocs并将其放置在mapLocs中的索引i处,从而生成所需的输出

尝试更改
mapLocs[i]=新数组(myLocs)
mapLocs[i]=myLocs您也可以尝试
mapLocs[i]=[myPhotogs[i].phtName,myPhotogs[i].phtLoc,x+1]
Ah!太棒了,真是太棒了!非常感谢你!您的代码从不声明
mapLocs
。在
for
循环之前,您需要如下内容:
var-mapLocs=[]。在您提供的内容中,还有一个额外的
}
,它与缩进不匹配。这只是我剪切和粘贴的代码片段。mapLocs实际上是在其他地方声明的,额外的}被错误地复制了。我认为这是正确的,因为它是正确的(我尝试过),尽管我实际上在我的原始帖子的第一条评论中同意了这个建议。无论如何,谢谢!很高兴你找到了答案。
mapLocs[i] = myLocs.slice()