javascript - 将 JavaScript 数组转换为对象

标签 javascript object

我不确定我在这方面做错了什么。当我尝试运行代码时,它说这里有一个未定义: obj[array[i]array[j][0]] = obj[array[i]array[j][1]];

有人可以解释一下我做错了什么吗? 我正在寻找生成一个看起来像

的对象返回
obj = {
    firstName:'Joe'
}



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

function transformEmployeeData(array){    
    var obj = {};    
    for(var i = 0; i < array.length; i++){    
        for(var j = 0; j < array[i].length; j++){    
            obj[array[i]array[j][0]] = obj[array[i]array[j][1]];    
        }    
    }    
    return obj;    
}      
transformEmployeeData(array);

最佳答案

一种简单的方法是使用 map 创建对象数组,并使用 forEach 分配每个名称/值对。

   var array = [
     [
       ['firstName', 'Joe'],
       ['lastName', 'Blow'],
       ['age', 42],
       ['role', 'clerk']
     ],
     [
       ['firstName', 'Mary'],
       ['lastName', 'Jenkins'],
       ['age', 36],
       ['role', 'manager']
     ]
   ]
   
   function transformEmployeeData(array){
     return array.map(a =>{ 
       var obj = {}; 
       a.forEach(a => obj[a[0]] = a[1]); 
       return obj;
     });
   }
   var results = transformEmployeeData(array);
   console.log(results[0]);
   console.log(results[1]);

或更紧凑的形式

function transformEmployeeData(arr){
  var obj; 
  return arr.map(a => (a.forEach((a, i) => (obj = !i ? {} : obj, obj[a[0]] = a[1])), obj));
}

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

相关文章:

javascript - MongoDB + JS 日期移动-1 天

javascript - 此 JavaScript 代码无法在 HTML5 应用程序中运行

javascript - Google 日历事件创建发送通知

javascript - 为什么 <object> 的类型是一个函数?

javascript - 如何在 JavaScript 中统计某一列中包含搜索词的所有 TD?

javascript - 访问对象内数组的元素

javascript - Asp.net MVC - 加载 JavaScript 文件

javascript - Puppeteer 单击 span 元素中的链接

java - 如何使用通用对象列表迭代器中的方法来调用另一个类的 equals 方法

java - 如果 java 函数的返回值是仅在运行时已知的两个可能对象之一,我的 java 函数应该返回什么对象?