通过3维数组迭代 - JS

问题描述:

我正在创建一个函数,它将3维数组合并到一个对象数组中。通过3维数组迭代 - JS

例子:

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];仅第二 阵列维数组中的所有项目。

这是在这种情况下,这一个:

[['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]]; 
  1. 如果我推物体插入空数组我会得到以下:

    姓名:“Mary”, 姓氏:“Jenkins”, 角色:“管理员” },[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象],[ ect],[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象],[圆形对象对象] [圆形对象的对象],[圆形对象的对象],[圆形对象的对象],[圆形对象的对象]]

  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); 
    
开始=>
+0

检查为什么具有MyObj中,在最高层只能选择第一套数组项下面 – Sletheren

你犯了错误:

  • 首先,你不需要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); 
+0

答案你能解释吗?抱歉试图了解这一点。虚拟在这里。 –

+1

是的!当设置var myObj = {}时,这意味着每个循环后都会创建一个新变量,这意味着旧值将被转储并且不会卡在数组中,如果我们保留myObj全局变量,那意味着所有变量都将被推送到那里并在返回中,我们将有超过2个对象(在这个例子中),因为在每一个数组中,我们再次推动,希望它有意义 – Sletheren

+0

有没有一种方法可以提供一点点视觉效果?像JSFiddle中的代码解释它如何工作?我很欣赏时间。 –

你可以这样考虑:

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); 

其结果会对你想所需的格式。

希望帮助