通过三维数组迭代 - JS

时间:2017-09-02 01:33:38

标签: javascript arrays

我正在创建一个将三维数组合并为一个对象数组的函数。

示例:

var input = [[['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'}
]

所以我所做的是遍历每个数组,然后获取第一个元素和最后一个元素并将其放在一个对象中。

但是我遇到了两件事:

  1. 使用myObj[employeeData[i][j][0]] = employeeData[i][j][k];仅使用第二个来获取数组中的所有项目 数组维度。
  2. 在这种情况下,这是一个:

    [['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]];
    
    1. 如果我将对象推入空数组,我将得到以下内容:

      [[object Object] {   年龄:36岁,   firstName:" Mary",   lastName:" Jenkins",   角色:"经理" },[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象], [圆形物体对象],[圆形物体对象],[圆形物体物体],[圆形物体物体],[圆形物体物体],[圆形物体物体],[圆形物体物体]]

    2. 不确定循环对象是什么意思。

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

      function arrayObject(data) {
      
        var arr = [];
        var myObj = {};
      
        for(var i = 0; i < data.length; i++){
          for(var j = 0; j < data[i].length; j++){
            for(var k = 0; k < data[i][j].length; k++){
              myObj[data[i][j][0]] =  data[i][j][k]; 
              arr.push(myObj);
            }
          }
        }
        return arr;
      
      }
      
      var input = [[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']],
                  [['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]];
      
      var output = arrayObject(input);
      console.log(output);
      

2 个答案:

答案 0 :(得分:1)

你犯了错误:

  • 首先,你不需要3个循环,正好两个循环,
  • 其次,myObj应该是上层循环的本地,因为它的值会 为输入中的每个数组进行更改。
function arrayObject(data) {
  var arr = [];
  for(var i = 0; i < data.length; i++){
      var myObj = {};
          for(var j = 0; j < data[i].length; j++){
              myObj[data[i][j][0]] =  data[i][j][1]; 
          }
      arr.push(myObj);
  }
  return arr;
}

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

var output = arrayObject(input);
console.log(output);

答案 1 :(得分:0)

你可以考虑这个:

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

var result = [];
// first loop through items
items.forEach(function(item)
{
   var obj = {};
   // then loop through properties
   item.forEach(function (value)
   {
      // then set property and value
      obj[value[0]] = value[1];
   });

   // once all is done push the object
   result.push(obj);
});

console.log(result);

哪个结果将具有您想要的格式。

希望有所帮助