Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在同一for循环中声明新对象而不覆盖以前的迭代?_Javascript_Arrays_Loops_Object_Iterator - Fatal编程技术网

Javascript 如何在同一for循环中声明新对象而不覆盖以前的迭代?

Javascript 如何在同一for循环中声明新对象而不覆盖以前的迭代?,javascript,arrays,loops,object,iterator,Javascript,Arrays,Loops,Object,Iterator,因此,我在这个练习中遇到的问题是,在我将第一个嵌套数组转换为对象之后,迭代将进入下一个嵌套数组,并覆盖我刚才转换的第一个嵌套数组 所以我的一个问题是,我如何告诉我的代码停止对我刚刚转换成的对象进行迭代,并使用我需要转换的下一个嵌套数组创建一个新对象 根据练习,除了我前面的问题之外,我还需要将新创建的对象放置在一个数组中。我计划先创建对象,然后在最后将它们放入占位符数组变量中。在循环中有没有更有效的方法 任何帮助都将不胜感激,在这里还是有点新鲜,所以不要太刻薄哈哈 以下是我到目前为止所做的+说明

因此,我在这个练习中遇到的问题是,在我将第一个嵌套数组转换为对象之后,迭代将进入下一个嵌套数组,并覆盖我刚才转换的第一个嵌套数组

所以我的一个问题是,我如何告诉我的代码停止对我刚刚转换成的对象进行迭代,并使用我需要转换的下一个嵌套数组创建一个新对象

根据练习,除了我前面的问题之外,我还需要将新创建的对象放置在一个数组中。我计划先创建对象,然后在最后将它们放入占位符数组变量中。在循环中有没有更有效的方法

任何帮助都将不胜感激,在这里还是有点新鲜,所以不要太刻薄哈哈

以下是我到目前为止所做的+说明

*编写一个名为“transformEmployeeData”的函数,将一些员工数据从一种格式转换为另一种格式

论点如下所示:

[
    [
        ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
    ],
    [
        ['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
    ]
]
Given that input, the return value should look like this:

[
    {firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk'},
    {firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'}
]
请注意,输入的行数或键数可能与给定的示例不同

例如,假设人力资源部在每个员工记录中添加一个“tshirtSize”字段。 您的代码应该灵活地适应这一点*

    function transformEmployeeData(employeeData) {
  debugger;
  var obj = {};
  for (var i = 0; i < employeeData.length; i++) {
    for (var y = 0; y < employeeData[i].length; y++) {
      obj[employeeData[i][y][0]] = employeeData[i][y][1]
    }
  }
  return obj
}
函数转换employeeData(employeeData){
调试器;
var obj={};
对于(变量i=0;i
在外部阵列上使用
.map()
,在内部阵列上使用
.reduce()

var数据=[
[
['firstName','Joe',['lastName','Blow'],['age',42],'role','clerk']
],
[
['firstName','Mary',['lastName','Jenkins',['age',36','role','manager']
]
];
var res=data.map(a=>a.reduce((r[k,v])=>({[k]:v,…r}),{});
控制台日志(res)
在外部数组上使用
.map()
,在内部数组上使用
.reduce()

var数据=[
[
['firstName','Joe',['lastName','Blow'],['age',42],'role','clerk']
],
[
['firstName','Mary',['lastName','Jenkins',['age',36','role','manager']
]
];
var res=data.map(a=>a.reduce((r[k,v])=>({[k]:v,…r}),{});

控制台日志(res)非常感谢。我使用了你的第一个建议作为模板,并使用2 for循环反向解决它。但是,除了这个问题(我希望你不介意)之外,如果你看一下我用来解决这个问题的代码,为什么我必须在第一个for循环下放置一个占位符变量,代码才能工作呢。我尝试将未定义的对象变量放在代码顶部附近,但它不起作用,如果您不介意的话,为什么会这样。
函数transformEmployeeData(数组){var arr=[];var obj={};for(var I=0;I
这是因为对象是引用类型,所以如果您只在循环外部定义它,那么在循环内部,您总是将它指定给同一个对象。如果你把它放在循环中,你会在每次迭代中创建一个新的、唯一的对象,非常感谢。我使用了你的第一个建议作为模板,并使用2 for循环反向解决它。但是,除了这个问题(我希望你不介意)之外,如果你看一下我用来解决这个问题的代码,为什么我必须在第一个for循环下放置一个占位符变量,代码才能工作呢。我尝试将未定义的对象变量放在代码顶部附近,但它不起作用,如果您不介意的话,为什么会这样。
函数transformEmployeeData(数组){var arr=[];var obj={};for(var I=0;I
这是因为对象是引用类型,所以如果您只在循环外部定义它,那么在循环内部,您总是将它指定给同一个对象。如果将其放入循环中,则在每次迭代中都会创建一个新的、唯一的对象