所以我这个练习的问题是,在我将第一个嵌套数组转换为对象后,迭代将进入下一个嵌套数组并覆盖我刚刚转换的第一个嵌套数组。
所以我的问题之一是如何告诉我的代码停止迭代我刚刚转换为对象的内容并使用我需要转换的下一个嵌套数组创建一个新对象?
添加到我之前的问题中,根据练习,我需要放置新创建的对象并将它们存储在数组中。我计划首先创建对象,然后最后将它们插入占位符数组变量中。有没有更有效的方法可以在循环中实现此目的?
任何帮助将不胜感激,这里仍然有点新,所以不要太刻薄哈哈。
这是我到目前为止所做的+说明!
*编写一个名为“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
}
最佳答案
在外部数组上使用 .map()
,在内部数组上使用 .reduce()
。
var data = [
[
['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}), {}));
console.log(res);
或者像这样:
var data = [
[
['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
],
[
['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
]
];
var res = data.map(a => Object.assign({}, ...a.map(([k, v]) => ({[k]: v}))));
console.log(res);
或者使用实际的Map
而不是对象。然后你可以这样做:
var data = [
[
['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
],
[
['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
]
];
var res = data.map(a => new Map(a));
for (const m of res) {
for (const [k, v] of m) {
console.log(k, v);
}
console.log("----------");
}
关于javascript - 如何在同一个 for 循环中声明一个新对象而不覆盖之前的迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47373116/