2017-05-08 85 views
0

我正在研究JS中的一个小问题(不分等级或学校,只是为了练习),而且似乎无法完全正确。以Javascript对象的数组

其目的是编写一个将多维数组转换为对象数组的函数。例如,输入可以是:

var data = [ 
    [ 
    ['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 transformEmployeeData(array) { 
    var object = {}; 
    var objectsArray = []; 
    for (i=0; i<array.length; i++) { 
    for (j=0; j<array[i].length; j++) { 
     var keys = array[i][j][0]; 
     object[keys] = array[i][j][1]; 
    } objectsArray.push(object); 
    } 
     return objectsArray); 
} 

这几乎是正确的,但我得到这个作为输出:

[ { firstName: 'Mary', 
lastName: 'Jenkins', 
age: 36, 
role: 'manager' }, 
{ firstName: 'Mary', 
lastName: 'Jenkins', 
age: 36, 
role: 'manager' } ] 

我该如何去修复这个函数,使它不会两次吐出同样的东西?

感谢您的帮助!

+0

你尝试过要通过代码使用调试器,或使用笔和纸?通过这种方式,您可以了解错误所在并修复错误。 – Li357

+1

你可以像'[**这个**](https://jsfiddle.net/vf0dp1rL/)一样使用'map'和'reduce'来完成。 –

+0

@ ibrahimmahrir - 但这并没有帮助OP。 – RobG

回答

2

您的代码创建一个对象的单个实例,然后覆盖该实例中的值。

要修复,创建新的对象,每次:

function transformEmployeeData(array) { 
    var objectsArray = []; 
    for (i=0; i<array.length; i++) { 
     var object = {}; 
     for (j=0; j<array[i].length; j++) { 
      var keys = array[i][j][0]; 
      object[keys] = array[i][j][1]; 
     }  
     objectsArray.push(object); 
    } 
    return objectsArray); 
} 
+0

非常感谢!我认为这是问题,但不知道该怎么办。很好的修复! – user211309

+0

乐意帮忙。请标记为接受:) – khan

1

您只创建对象变量的1个实例。 在循环内创建一个新实例(object = {})。

你是ovirriding每个运行的对象的属性,但实际上使用相同的对象。