在嵌套循环中移动变量 JavaScript
Moving variables in nested Loop JavaScript
function transformEmployeeData(employeeData) {
var arr = [];
var obj = {};
for (var i = 0; i < employeeData.length; i++) {
var personArr = employeeData[i];
for (var j = 0; j < personArr.length; j++) {
var key = personArr[j][0];
var value = personArr[j][1];
obj[key] = value;
}
arr.push(obj);
}
return arr;
}
input = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
];
var getData = transformEmployeeData(input);
console.log(getData);
我希望我的结果是这样的:
[
{firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk'},
{firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'}
]
所以我将 var obj = {};
移动到第一个 for 循环中,我得到了正确的结果。但我仍然不明白为什么我必须将它移动到循环内?有什么不同?请帮忙,谢谢!
如果你不把它放在循环中,你就是在定义一个对象,只是在循环体内修改它的内容,然后把这个对象推入数组。
但是,如果将它包含在循环中,则每次循环体执行时都会创建一个新对象(现有变量不再指向前一个对象,现在引用新对象),然后推送该新对象进入数组,导致输出中有多个对象。
如果您不在第一个循环中添加该对象,您将为整个函数执行创建一个对象,该对象可以由第二个循环覆盖第一个循环的先前属性
你可以使用 map
和 Object.fromEntries
function transformEmployeeData(employeeData) {
return employeeData.map(Object.fromEntries)
}
input = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
];
var getData = transformEmployeeData(input);
console.log(getData);
function transformEmployeeData(employeeData) {
var arr = [];
var obj = {};
for (var i = 0; i < employeeData.length; i++) {
var personArr = employeeData[i];
for (var j = 0; j < personArr.length; j++) {
var key = personArr[j][0];
var value = personArr[j][1];
obj[key] = value;
}
arr.push(obj);
}
return arr;
}
input = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
];
var getData = transformEmployeeData(input);
console.log(getData);
我希望我的结果是这样的:
[
{firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk'},
{firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'}
]
所以我将 var obj = {};
移动到第一个 for 循环中,我得到了正确的结果。但我仍然不明白为什么我必须将它移动到循环内?有什么不同?请帮忙,谢谢!
如果你不把它放在循环中,你就是在定义一个对象,只是在循环体内修改它的内容,然后把这个对象推入数组。
但是,如果将它包含在循环中,则每次循环体执行时都会创建一个新对象(现有变量不再指向前一个对象,现在引用新对象),然后推送该新对象进入数组,导致输出中有多个对象。
如果您不在第一个循环中添加该对象,您将为整个函数执行创建一个对象,该对象可以由第二个循环覆盖第一个循环的先前属性
你可以使用 map
和 Object.fromEntries
function transformEmployeeData(employeeData) {
return employeeData.map(Object.fromEntries)
}
input = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
];
var getData = transformEmployeeData(input);
console.log(getData);