javascript - 在javascript中将嵌套数组转换为对象

标签 javascript arrays object nested

我正在处理一项涉及将数组转换为对象的作业,但我有点忙。我们从一个数组开始,包含两个额外的嵌套数组,每个嵌套数组包含可变数量的数组(每个数组由两个值组成)。

赋值是将所有这些转换成一个数组,包含多个对象。在每个对象中,将有一系列键/值对,它们等于每个最小给定数组中的两个值。

例如

参数看起来像这样:

[
  [['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']],
  [['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]
]

给定该输入,返回值应如下所示:

[{firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk'}, {firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'}]

使用调试器,我确定我的代码正确地将键/值对分配给返回语句中的第一个对象。但是,当循环继续时,不是创建新的嵌套对象,而是替换第一个对象中的键/值对,因此我最终只得到一个对象,该对象具有评估的最终数组中的正确键值对。

到目前为止,这是我的代码:

function transformEmployeeData(employeeData) {
  var obj = {}, arr = []
  for (var i = 0; i < employeeData.length; i ++) {
    for (var j = 0; j < employeeData[i].length; j ++) {
      var key = employeeData[i][j][0];
      var value = employeeData[i][j][1];
      obj[key] = value;
    }
    arr.push(obj);
  }
  return arr;
}

这个让我的大脑有点纠结...任何建议将不胜感激!!!

最佳答案

问题的更新和单行解决方案:

const input = [
  [['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']],
  [['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]
]

const output = input.map(a => Object.fromEntries(a));

console.log(output);

Object.fromEntries()已在 ECMAScript 2019 (ES10) 中引入

在撰写本文时(2019年4月11日),该方法已经在Chrome 73和Firefox 63上实现,即将在各大浏览器的新版本中实现。从 7.4.0 (core-js@3) 版本开始,该方法在 BabelJs 中也可用。

关于javascript - 在javascript中将嵌套数组转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48203781/

相关文章:

javascript - 这个符号在JavaScript中是什么意思?

javascript - 使用 ReactJS 访问 Flask session

python - 如何从目录中读取所有 .txt 文件

javascript - 开 Jest : Compare DOM element with JavaScript Object

javascript - 如何检查一个对象是否包含另一个对象?

javascript - 包装异步 JavaScript 函数以使其同步的模式

Java最小生成树问题

javascript - 与推()相反;

C# 自定义记录器 - 捕获发送对象的最佳方法

javascript - 我可以反过来从对象创建可调用函数吗?