Javascript 使用自动索引在循环中创建多维数组

Javascript 使用自动索引在循环中创建多维数组,javascript,jquery,arrays,loops,multidimensional-array,Javascript,Jquery,Arrays,Loops,Multidimensional Array,我想使用jQuery/JS中的循环创建一个多维数组。是否可以使用下一个可用键而不是手动设置 jsonFromPhp包含如下内容: 0 {first_name: "Tom", last_name: "Smith", location: "London"} 1 {first_name: "Max", last_name: "Muster", location: "Zurich"} 2 {first_name: "Joanne", last_name: "Kate", location: "Londo

我想使用jQuery/JS中的循环创建一个多维数组。是否可以使用下一个可用键而不是手动设置

jsonFromPhp包含如下内容:

0 {first_name: "Tom", last_name: "Smith", location: "London"}
1 {first_name: "Max", last_name: "Muster", location: "Zurich"}
2 {first_name: "Joanne", last_name: "Kate", location: "London"}
...
以下是循环:

jsonFromPhp.forEach((row, i) => {
    if (row['location'] == 'London') {
        firstKey = 0;
    } else {
        firstKey = 1;
    }

    row.forEach((singleData, n) => {
        pushedArray[firstKey][] = singleData[n]; // doesn't work, I have set the index manually (with i for example). But then I have an array like 0, 2, 5 etc. and I need 0, 1, 2
    });
});

Expected Result:
0 Array (1)
    0 ["Tom", "Smith", "London"] (3)
    1 ["Joanne", "Kate", "London"] (3)
    ...
1 Array (1)
    0 ["Max", "Muster", "Zurich"] (3)
    ...
而不是(如果我设置pushedArray[firstKey][I]


此解决方案将适用于2个以上的位置,并且无需关心从后端为
位置
提供的值

const arr=[{
名字:“汤姆”,
姓:“史密斯”,
地点:“伦敦”
}, {
名字:“Max”,
姓:“集合”,
地点:“苏黎世”
}, {
名字:“乔安妮”,
姓:“凯特”,
地点:“伦敦”
}]
const result={};
arr.map(项目=>{
结果[项目位置]=[];
退货项目;
}).map(项目=>{
结果[item.location].push(Object.values(item));
});
设res2=[];
Object.keys(结果).forEach((键,索引)=>{
res2[index]=结果[key]
});
console.log(res2)
使用下一个可用键

要自动生成数组索引,最简单的方法是

arr.push(value)
这和

arr[arr.length] = value
这个问题中的问题是多维数组,以确保您“推动”到正确的维度

在本例中,第一维(“伦敦”)的长度始终为2,因此我们可以通过提前创建阵列来简化此过程:

var arr = [[],[]];
它创建了一个包含2个条目的数组,这两个条目本身都是空数组(2维)

然后,代码确定是使用0还是1,这很好-下一个维度是源中的每一行/对象,下一个维度是数据所在的位置,给出:

var源=[
{名字:“汤姆”,姓氏:“史密斯”,地点:“伦敦”},
{名字:“Max”,姓氏:“Muster”,地点:“苏黎世”},
{名字:“乔安妮”,姓氏:“凯特”,地点:“伦敦”}
];
//最初创建第一个维度(arr[0],arr[1])
var arr=[[],[];
//循环遍历每个源行
source.forEach((行,i)=>{
如果(第['location']行=='London'){
firstKey=0;
}否则{
firstKey=1;
}
//为此行添加子维度
var rowArr=[];
for(第行中的var k)
{
//将属性添加到子维度中
行推送(行[k]);
}
//将对象->数组添加到0/1顶级数组中
//使用“下一个可用索引”
arr[firstKey].push(rowArr);
});

控制台日志(arr)
(行['location']=='london'
区分大小写,您的值是
london
@freedomn-m感谢您的提示,更新了代码。这只是我代码的一个较短版本,因此如果仍然存在键入错误,我很抱歉:)。使用下一个可用的键,这就是
.push()
所做的-
pushedArray[I].push(singleData[n] )
@freedomn-m但这会将所有行插入一个。请查看预期的输出和我不期望/需要的内容。:)基本上,我需要一个包含所有值的头数组和行数组。我明白你所说的“将所有行插入一个”的意思。推送:-需要先创建子数组,然后推送到该子数组(第二维度),不是第一个维度谢谢你的回答。我会把这个留到以后的项目中。
arr[arr.length] = value
var arr = [[],[]];