2017-09-02 78 views
0

我正在创建一个函数,它将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']]]; 
  • 如果我推物体插入空数组我会得到以下:

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

  • 不确定圆形对象的意思。

    这里是我的代码至今:

    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

    回答

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

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

    +1

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

    +0

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

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

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

    希望帮助