将多维数组转换为对象数组。嵌套循环与回调
Transforming multidimensional array into array of objects. Nested loops vs callbacks
我目前正在研究一个非常流行的 JS 对象问题:transformEmployeeData。我得到了映射参数数组及其内部数组的解决方案。我对此很满意。但是,我第一次尝试解决同样的问题是创建两个循环,嵌套它们并创建我的对象。由于某种原因,这个解决方案没有给我预期的结果,我想知道为什么会这样?正如我所说,我的兴趣是学习好 JS 的工作原理。不仅让我的规格达到 运行。谢谢。
这里是已经可以工作的代码:
function transformEmployeeData(array) {
return array.map(function(outterArr){
const finalObj = {};
outterArr.map(function(innerArr){
finalObj[innerArr[0]] = innerArr[1];
});
return finalObj; }); }
其 returning 值(预期值):
[ { firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk' }, {
firstName: 'Mary',
lastName: 'Jenkins',
age: 36,
role: 'manager' } ]
我的第一次尝试(我不明白为什么它不return上述值):
function transformEmployeeData(array) {
let finalArr = [];
const finalObj = {};
for(let i = 0; i < array.length; i +=1){
let outterArr = array[i];
for (let j = 0; j < outterArr.length; j+=1){
let innerArr = outterArr[j];
finalObj[innerArr[0]] = innerArr[1];
}
finalArr.push(finalObj);
}
return finalArr;
}
它的 return 值(对我来说很奇怪……):
[ { firstName: 'Mary',
lastName: 'Jenkins',
age: 36,
role: 'manager' },
{ firstName: 'Mary',
lastName: 'Jenkins',
age: 36,
role: 'manager' } ]
原始数据:
var employeeData = [
[
['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
],
[
['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
]
];
你定义了一次finalObj
,但是你多次更新和推送它。由于同一个对象被推入数组,所有项目都显示在上一个循环中分配的值。在每次迭代中创建一个新的 finalObj
:
function transformEmployeeData(array) {
const finalArr = [];
for (let i = 0; i < array.length; i += 1) {
const finalObj = {};
const outterArr = array[i];
for (let j = 0; j < outterArr.length; j += 1) {
const innerArr = outterArr[j];
finalObj[innerArr[0]] = innerArr[1];
}
finalArr.push(finalObj);
}
return finalArr;
}
const employeeData = [[["firstName","Joe"],["lastName","Blow"],["age",42],["role","clerk"]],[["firstName","Mary"],["lastName","Jenkins"],["age",36],["role","manager"]]];
console.log(transformEmployeeData(employeeData));
您也可以使用 for...of
代替标准的 for 循环:
function transformEmployeeData(array) {
const finalArr = [];
for (const outterArr of array) {
const finalObj = {};
for (const innerArr of outterArr) {
finalObj[innerArr[0]] = innerArr[1];
}
finalArr.push(finalObj);
}
return finalArr;
}
const employeeData = [[["firstName","Joe"],["lastName","Blow"],["age",42],["role","clerk"]],[["firstName","Mary"],["lastName","Jenkins"],["age",36],["role","manager"]]];
console.log(transformEmployeeData(employeeData));
我目前正在研究一个非常流行的 JS 对象问题:transformEmployeeData。我得到了映射参数数组及其内部数组的解决方案。我对此很满意。但是,我第一次尝试解决同样的问题是创建两个循环,嵌套它们并创建我的对象。由于某种原因,这个解决方案没有给我预期的结果,我想知道为什么会这样?正如我所说,我的兴趣是学习好 JS 的工作原理。不仅让我的规格达到 运行。谢谢。
这里是已经可以工作的代码:
function transformEmployeeData(array) {
return array.map(function(outterArr){
const finalObj = {};
outterArr.map(function(innerArr){
finalObj[innerArr[0]] = innerArr[1];
});
return finalObj; }); }
其 returning 值(预期值):
[ { firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk' }, {
firstName: 'Mary',
lastName: 'Jenkins',
age: 36,
role: 'manager' } ]
我的第一次尝试(我不明白为什么它不return上述值):
function transformEmployeeData(array) {
let finalArr = [];
const finalObj = {};
for(let i = 0; i < array.length; i +=1){
let outterArr = array[i];
for (let j = 0; j < outterArr.length; j+=1){
let innerArr = outterArr[j];
finalObj[innerArr[0]] = innerArr[1];
}
finalArr.push(finalObj);
}
return finalArr;
}
它的 return 值(对我来说很奇怪……):
[ { firstName: 'Mary',
lastName: 'Jenkins',
age: 36,
role: 'manager' },
{ firstName: 'Mary',
lastName: 'Jenkins',
age: 36,
role: 'manager' } ]
原始数据:
var employeeData = [
[
['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
],
[
['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
]
];
你定义了一次finalObj
,但是你多次更新和推送它。由于同一个对象被推入数组,所有项目都显示在上一个循环中分配的值。在每次迭代中创建一个新的 finalObj
:
function transformEmployeeData(array) {
const finalArr = [];
for (let i = 0; i < array.length; i += 1) {
const finalObj = {};
const outterArr = array[i];
for (let j = 0; j < outterArr.length; j += 1) {
const innerArr = outterArr[j];
finalObj[innerArr[0]] = innerArr[1];
}
finalArr.push(finalObj);
}
return finalArr;
}
const employeeData = [[["firstName","Joe"],["lastName","Blow"],["age",42],["role","clerk"]],[["firstName","Mary"],["lastName","Jenkins"],["age",36],["role","manager"]]];
console.log(transformEmployeeData(employeeData));
您也可以使用 for...of
代替标准的 for 循环:
function transformEmployeeData(array) {
const finalArr = [];
for (const outterArr of array) {
const finalObj = {};
for (const innerArr of outterArr) {
finalObj[innerArr[0]] = innerArr[1];
}
finalArr.push(finalObj);
}
return finalArr;
}
const employeeData = [[["firstName","Joe"],["lastName","Blow"],["age",42],["role","clerk"]],[["firstName","Mary"],["lastName","Jenkins"],["age",36],["role","manager"]]];
console.log(transformEmployeeData(employeeData));