【问题标题】:turning nested subArrays into object key/value pairs inside of an array将嵌套子数组转换为数组内的对象键/值对
【发布时间】:2017-03-08 05:15:38
【问题描述】:

编写一个函数,将一些员工数据从一种格式转换为另一种格式。

参数看起来像这样:

[  
  [  
    ['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 keyValue (){
var arr3 = [];
var person = {}; 

for (var i = 0; i < arr.length; i++){
     for (var j = 0; j < arr[i].length; j++){
         var key = arr[i][j][0];
         var val = arr[i][j][1];
         person[key]  = val;
        }
    arr3[i] = person;
   }
  console.log(person) // desired output, but not returned
  return arr3;        // either only one instance "joe"  or 2
                      // "marys" depending on where I return
}
keyValue(arr)

 //console.logged()
    { firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk' }
{ firstName: 'Mary',
  lastName: 'Jenkins',
  age: 36,
  role: 'manager' }

 //returned
=> [ { firstName: 'Mary',
    lastName: 'Jenkins',
    age: 36,
    role: 'manager' },
  { firstName: 'Mary',
    lastName: 'Jenkins',
    age: 36,
    role: 'manager' } ]

【问题讨论】:

    标签: javascript multidimensional-array associative-array nested-loops keyvaluepair


    【解决方案1】:

    您需要为每个数组创建一个person 对象。将var person = {} 移动到for 循环内,在第二个for 循环之前

    var arr = [
      [
        ['firstName', 'Joe'],
        ['lastName', 'Blow'],
        ['age', 42],
        ['role', 'clerk']
      ],
      [
        ['firstName', 'Mary'],
        ['lastName', 'Jenkins'],
        ['age', 36],
        ['role', 'manager']
      ]
    ]
    
    function keyValue(arr) {
      var arr3 = [];
      for (var i = 0; i < arr.length; i++) {
        var person = {};
        for (var j = 0; j < arr[i].length; j++) {
          var key = arr[i][j][0];
          var val = arr[i][j][1];
          person[key] = val;
        }
        arr3[i] = person;
      }
      return arr3; 
    }
    
    var res = keyValue(arr);
    console.log(res);

    您也可以使用.map()for..of 循环

    var arr = [
      [
        ['firstName', 'Joe'],
        ['lastName', 'Blow'],
        ['age', 42],
        ['role', 'clerk']
      ],
      [
        ['firstName', 'Mary'],
        ['lastName', 'Jenkins'],
        ['age', 36],
        ['role', 'manager']
      ]
    ];
    
    var res = arr.map(array => {
      var obj = {};
      for (var [key, value] of array) {
        obj[key] = value
      }
      return obj
    });
    
    console.log(res);

    【讨论】:

    猜你喜欢
    • 2019-04-26
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多