Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将类似表格的二维数组转换为对象(JavaScript)_Javascript_Arrays - Fatal编程技术网

将类似表格的二维数组转换为对象(JavaScript)

将类似表格的二维数组转换为对象(JavaScript),javascript,arrays,Javascript,Arrays,我有一个二维数组,看起来像这样: var myArray = [ ['Name', 'Age', 'Profession'], ['John', 34, 'Teacher'], ['Jane', 45, 'Artist'] ]; var myObject = { "Name": { "Name": "Name", "Age": "Age", "Profession": "Profession" }

我有一个二维数组,看起来像这样:

var myArray = [
    ['Name', 'Age', 'Profession'],
    ['John', 34, 'Teacher'],
    ['Jane', 45, 'Artist']
];
var myObject =
{
    "Name":
    {
        "Name": "Name",
        "Age": "Age",
        "Profession": "Profession"
    }
    "John":
    {
        "Name": "John",
        "Age": 34,
        "Profession": "Teacher"
    }
    "Jane":
    {
        "Name": "Jane",
        "Age": 45,
        "Profession": "Artist"
    }
};
我想将此数组转换为如下所示的对象:

var myArray = [
    ['Name', 'Age', 'Profession'],
    ['John', 34, 'Teacher'],
    ['Jane', 45, 'Artist']
];
var myObject =
{
    "Name":
    {
        "Name": "Name",
        "Age": "Age",
        "Profession": "Profession"
    }
    "John":
    {
        "Name": "John",
        "Age": 34,
        "Profession": "Teacher"
    }
    "Jane":
    {
        "Name": "Jane",
        "Age": 45,
        "Profession": "Artist"
    }
};
在中,我遇到了Array.prototype.reduce(),我能够做到以下几点:

var myObject = myArray.reduce(function(result, currentItem) {
  result[currentItem[0]] = currentItem;
  return result;
}, {})

Logger.log(myObject);
// {John=[John, 34.0, Teacher], Jane=[Jane, 45.0, Artist], Name=[Name, Age, Profession]}
但是,我不知道如何应用reduce()来获取嵌套对象,或者是否需要其他方法

安德烈亚斯

编辑:

  • 我在寻找一个动态的解决方案,也就是说:我事先不知道我的数组包含多少元素,或者它们的值是什么
  • 我更喜欢一个比遍历所有元素(如果可能)更快、更优雅的解决方案

    • 我认为最简单的方法是使用

      另一种方法是只使用on-for语句

      for(int i=1;myArray.length;i++)
      {
          var el = myArray[i];
          myObjects2[el[0]] = { 
              'Name': el[0],
              'Age': el[1],
              'Profession': el[2]
          }
      }
      

      具有reduce和对象以及一些嵌套属性的解决方案

      var myArray=[['Name','Age','Profession',['John',34','Teacher',['Jane',45',Artist']],
      result=myArray.reduce(函数(r,a){
      //获取myArray的第一个元素('Name','John','Jane'),并将其作为键
      //对于对象。如果没有可用对象,则生成新对象
      //阅读这里:r.Name=r.Name | |{}
      r[a[0]]=r[a[0]| |{};
      //迭代[‘姓名’、‘年龄’、‘职业’]
      myArray[0]。forEach(函数(b,i){
      //根据对象的相应属性指定相应值
      //阅读这里:r.Name.Name='Name'
      //next r.Name.Age='Age'
      r[a[0]][b]=a[i];
      });
      返回r;
      }, {});
      document.write(“”+JSON.stringify(结果,0,4)+“”)
      这个想法是在每一行做同样的减少

      var myArray=[
      [‘姓名’、‘年龄’、‘职业’],
      [约翰,34岁,老师],
      ['Jane',45岁,'Artister']
      ];
      var result=myArray.reduce(
      函数(r,a){
      var row=a.reduce(
      功能(rr、cc、i){
      rr[myArray[0][i]]=cc;
      返回rr;
      }, {});
      r[a[0]]=行;
      返回r;
      }, {});
      
      document.write(“”+JSON.stringify(结果,0,4)+“”)确实如此。请注意,
      array.prototype.map
      在IE8和早期版本()上不可用。您生成的是一个数组,而不是每个项都有属性的对象。是的,我知道,但这一部分很简单,我不想混淆这个示例。但是你可以只做
      myObject2[el[0]]={…}
      我明白了,但是在我的例子中,我不知道我的数组由多少个元素组成,或者它们被调用了什么。对不起,我应该在我的问题中提到这一点。所以@Nina Scholz的答案对你来说会更好。这个作品很好,谢谢。但我还是想弄清楚它的作用。你能补充几句代码背后的想法吗?为什么第一个数组索引是对象的一部分?如果是动态的,基本上所有的解决方案都需要迭代。@epascarello:不确定,如果我没有弄错你的问题:名称(John,Jane)作为键和值的用法只是一个简单的例子。实际上,我将从几个值(例如姓名、出生日期和电子邮件)中创建一个唯一的键,并将其用作我的对象中的键。看起来像
      ['name'、'Age'、'Profession']
      正在指向一个表,只是看起来很奇怪,您可能会有一个条目。