这个特殊的挑战要求我将数组数组(有这个术语吗?)转换为对象数组,如下所示:
[[['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={};
for (var i = 0; i < array.length;i++){
var newArray = array[i];
object[i] = newArray[1];
object[newArray[0]] = object[i];
newArray.push(object);
delete object[i];
}
return object;
}
var myArray= [['firstName','Joe'],['lastName','Blow'],['age', 42], ['role','clerk']];
transformEmployeeData(myArray);
它似乎工作得很好,直到我添加了另一个嵌套数组,其中包含第二个(或第三个或第四个,这是整件事的重点)员工的数据。
我确定它与循环有关,但我无法发现它。
感谢帮助!
最佳答案
您需要在循环内部创建一个新对象,这样您每次都在创建一个新对象,而不是仅仅重新分配同一个对象的属性——您将同一个对象插入数组多次。 (我不确定你为什么要使用 delete
- 你不需要它。)
所以像这样:
function transformEmployeeData(data) {
var result = [] // new array to hold transformed data
var key, value
for (var i = 0; i < data.length; i++) { // loop over employees
var employee = {} // new object for current employee
for (var j = 0; j < data[i].length; j++) { // loop over current employee details
key = data[i][j][0] // extract property key name
value = data[i][j][1] // and value
employee[key] = value // add property to object
}
result.push(employee) // add new object to array
}
return result
}
var input = [[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']],
[['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]]
console.log( transformEmployeeData(input) )
或者如果你想使用一些数组函数,比如 .map()
和 .reduce()
您可以“简化”代码:
function transformEmployeeData(data) {
return data.map(function(employee) {
return employee.reduce(function(a, c) {
a[c[0]] = c[1]
return a
}, {})
})
}
var input = [[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']],
[['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]]
console.log( transformEmployeeData(input) )
关于javascript - 数组数组到对象数组 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43036792/