javascript - 数组数组到对象数组 JS

标签 javascript arrays

这个特殊的挑战要求我将数组数组(有这个术语吗?)转换为对象数组,如下所示:

[[['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(array) {
var object={};
for (var i = 0; i < array.length;i++){
    var newArray = array[i];
    object[i] = newArray[1];
    object[newArray[0]] = object[i];
    newArray.push(object);
    delete object[i];
    }
return object;
}

var myArray= [['firstName','Joe'],['lastName','Blow'],['age', 42], ['role','clerk']];
transformEmployeeData(myArray); 

它似乎工作得很好,直到我添加了另一个嵌套数组,其中包含第二个(或第三个或第四个,这是整件事的重点)员工的数据。

我确定它与循环有关,但我无法发现它。

感谢帮助!

最佳答案

您需要在循环内部创建一个新对象,这样您每次都在创建一个新对象,而不是仅仅重新分配同一个对象的属性——您将同一个对象插入数组多次。 (我不确定你为什么要使用 delete - 你不需要它。)

所以像这样:

function transformEmployeeData(data) {
  var result = []                              // new array to hold transformed data
  var key, value
  for (var i = 0; i < data.length; i++) {      // loop over employees
    var employee = {}                          // new object for current employee
    for (var j = 0; j < data[i].length; j++) { // loop over current employee details
      key = data[i][j][0]                      // extract property key name
      value = data[i][j][1]                    // and value
      employee[key] = value                    // add property to object
    }
    result.push(employee)                      // add new object to array
  }
  return result
}

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

console.log( transformEmployeeData(input) )

或者如果你想使用一些数组函数,比如 .map().reduce()您可以“简化”代码:

function transformEmployeeData(data) {
  return data.map(function(employee) {
    return employee.reduce(function(a, c) {
      a[c[0]] = c[1]
      return a
    }, {})
  })
}

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

console.log( transformEmployeeData(input) )

关于javascript - 数组数组到对象数组 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43036792/

相关文章:

javascript - “网络错误: 405 Method Not Allowed error in Ajax Call

javascript - JSON 调用给出的值实际上不在 .json 文件中

c# - 将点的 ArrayList 转换为字节数组以存储在 SQL 数据库中

java - 用其他方法写出表格

php - 脚本删除关键字后的文本

javascript - 如何在 javascript 中为动画制作一个轻松的功能?

c++ - 无法通过 C 中的 UDP 套接字接收完整整数数组

c - 在 C 中反转字符串

javascript - 再次运行函数时,它不会读取全局数组

ios - Swift - 迭代字典数组