Javascript 在嵌套数组中循环并转换为对象

Javascript 在嵌套数组中循环并转换为对象,javascript,arrays,loops,multidimensional-array,nested-loops,Javascript,Arrays,Loops,Multidimensional Array,Nested Loops,我想将一组嵌套数组转换为一组对象,其中包含从嵌套数组中收集的信息: 之前: var employeeData = [ [ ['firstName', 'Bob'], ['lastName', 'Lob'], ['age', 22], ['role', 'salesperson'] ], [ ['firstName', 'Mary'], ['lastName', 'Joe'], ['age', 32], ['role', 'director'] ] ] 之后: [

我想将一组嵌套数组转换为一组对象,其中包含从嵌套数组中收集的信息:

之前:

var employeeData = [
  [
    ['firstName', 'Bob'], ['lastName', 'Lob'], ['age', 22], ['role', 'salesperson']
  ],
  [
    ['firstName', 'Mary'], ['lastName', 'Joe'], ['age', 32], ['role', 'director']
  ]
]
之后:

[
  {firstName: 'Bob', lastName: 'Lob', age: 22, role: 'salesperson'},
  {firstName: 'Mary', lastName: 'Joe', age: 32, role: 'director'}
]
下面是我为解决这个问题而编写的函数,但我不太清楚循环出了什么问题:

var employeeData=[
[
['firstName','Bob'],['lastName','Lob'],['age',22],'role','sallerson']
],
[
['firstName','Mary',['lastName','Joe'],['age',32],'role','director']
]
]
函数转换数据(employeeData){
让newObject={};
设newArr=[];
对于(var i=0;iconsole.log(transformData(employeeData))如何修复代码

循环只需2个: 1.迭代数组 2.迭代子数组并构造对象

var employeeData=[[“姓氏”、“鲍勃”]、[“姓氏”、“Lob”]、[“年龄”、“22岁”、“角色”、“销售员”]、[[“姓氏”、“玛丽”]、[“姓氏”、“乔”]、[“年龄”、“32岁”、“角色”、“主管”]]
函数转换数据(employeeData){
让新对象;
常数newArr=[];
对于(变量i=0;iconsole.log(transformData(employeeData))您的代码有什么问题:

for (var i = 0; i < employeeData.length; i++) { 
    for (var x = 0; x < employeeData[i].length; x++) { 
        newObject[employeeData[i][x][0]] = employeeData[i][x][1];
    }
    newArr.push(newObject);
    newObject = {};
}
循环的第三级
出错。应将其删除:

for (var y = 0; y < employeeData[i][x].length; y++) {
//                                  ^ by the way this should be x not y (not fixing the problem though)
固定代码示例:

for (var i = 0; i < employeeData.length; i++) { 
    for (var x = 0; x < employeeData[i].length; x++) { 
        newObject[employeeData[i][x][0]] = employeeData[i][x][1];
    }
    newArr.push(newObject);
    newObject = {};
}
var employeeData=[
[
['firstName','Bob'],['lastName','Lob'],['age',22],'role','sallerson']
],
[
['firstName','Mary',['lastName','Joe'],['age',32],'role','director']
]
]
函数转换数据(employeeData){
让newObject={};
设newArr=[];
对于(var i=0;iconsole.log(transformData(employeeData))
对于外部数组中的每一组值,您可能只想使用
映射
而不是
对象

然后是一个非常简单的
新地图(数据)转换。这些类型的数据集的规范中添加了地图

var employeeData=[
[['firstName','Bob'],['lastName','Lob'],['age',22],'role','salesperson'],
[['firstName','Mary'],['lastName','Joe'],['age',32],'role','director']]
];
const res=employeeData.map(a=>newmap(a));
用于(常数m/res){
log(m.get(“firstName”);

}
问题在于变量x和y的使用

首先,这是一条线

for (var y = 0; y < employeeData[i][y].length; y++)
通过这些更改运行您的示例,我得到了正确的输出:

[
  {
    firstName: 'Bob',
    lastName: 'Lob',
    age: 22,
    role: 'salesperson'
  },
  {
    firstName: 'Mary',
    lastName: 'Joe',
    age: 32,
    role: 'director'
  }
]

其他人指出,使用
map
array函数可以简化任务,这些都是很好的解决方案(比计算循环要好得多),但它们并没有解决您实际提出的问题

您的代码实际上运行得很好,只是没有提取所有可用的数据。你只知道名字和姓氏。通过再添加两行,您可以获得其余的数据。此外,第二个循环甚至不是必需的(它不会伤害您,但实际上没有帮助,因为您从未在任何地方使用
x
计数器)

var employeeData=[
[
['firstName','Bob'],['lastName','Lob'],['age',22],'role','sallerson']
],
[
['firstName','Mary',['lastName','Joe'],['age',32],'role','director']
]
]
函数转换数据(employeeData){
让newObject={};
设newArr=[];
对于(var i=0;iconsole.log(transformData(employeeData))如果正确使用索引,您所面临的问题可以在尝试时使用for循环来解决。
如果你像我一样格式化你的数据,你会看到你的索引有三个级别你的[I,x,y]

例如,对于employeeData[0],您应该获得:

[
    ['firstName', 'Bob'],
    ['lastName', 'Lob'],
    ['age', 22],
    ['role', 'salesperson']
  ]
那么对于employeeData[0][0],您应该获得:

 ['firstName', 'Bob']
对于employeeData[0][0][0],您应该获得:
'firstName'

要访问“Bob”,您需要使用数据[0][0][1],并且由于您知道此内部数组中只有两个元素,因此不需要在其中循环。 正如@TallChuck所说,你的问题很大一部分源于忘记使用你的x索引

var employeeData=[
[
['firstName','Bob'],
['lastName','Lob'],
[‘年龄’,22],
[“角色”、“销售人员”]
],
[
['firstName','Mary'],
['lastName','Joe'],
[age',32],
[‘角色’、‘导演’]
]
]
函数转换数据(employeeData){
让newObject={};
设newArr=[];
对于(变量i=0;ivar employeeData = [
  [
   ['firstName', 'Bob'], ['lastName', 'Lob'], ['age', 22], ['role', 'salesperson']
   ],
  [
   ['firstName', 'Mary'], ['lastName', 'Joe'], ['age', 32], ['role', 'director']
  ]
  ]

var d = employeeData.map(
      x=>x.reduce((a,b)=>{a[b[0]]=b[1];return a;},{})
)


console.log(d)