以Javascript对象的数组
问题描述:
我正在研究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' } ]
我该如何去修复这个函数,使它不会两次吐出同样的东西?
感谢您的帮助!
答
您的代码创建一个对象的单个实例,然后覆盖该实例中的值。
要修复,创建新的对象,每次:
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个实例。 在循环内创建一个新实例(object = {})。
你是ovirriding每个运行的对象的属性,但实际上使用相同的对象。
你尝试过要通过代码使用调试器,或使用笔和纸?通过这种方式,您可以了解错误所在并修复错误。 – Li357
你可以像'[**这个**](https://jsfiddle.net/vf0dp1rL/)一样使用'map'和'reduce'来完成。 –
@ ibrahimmahrir - 但这并没有帮助OP。 – RobG