[英]Transforming JavaScript Array into an Object
我不确定在这方面我做错了什么。 当我尝试运行代码时,它说这里没有未定义: obj[array[i]array[j][0]] = obj[array[i]array[j][1]];
有人可以解释我在做什么错吗? 我正在寻找产生看起来像的对象返回
obj = {
firstName:'Joe'
}
var array = [
[
['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
],
[
['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
]
]
function transformEmployeeData(array){
var obj = {};
for(var i = 0; i < array.length; i++){
for(var j = 0; j < array[i].length; j++){
obj[array[i]array[j][0]] = obj[array[i]array[j][1]];
}
}
return obj;
}
transformEmployeeData(array);
一种简单的方法是使用map创建对象数组,并使用forEach分配每个名称/值对。
var array = [ [ ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk'] ], [ ['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager'] ] ] function transformEmployeeData(array){ return array.map(a =>{ var obj = {}; a.forEach(a => obj[a[0]] = a[1]); return obj; }); } var results = transformEmployeeData(array); console.log(results[0]); console.log(results[1]);
或更紧凑的形式
function transformEmployeeData(arr){
var obj;
return arr.map(a => (a.forEach((a, i) => (obj = !i ? {} : obj, obj[a[0]] = a[1])), obj));
}
第二部分需要更少的数组且没有对象。
obj[array[i][j][0]] = array[i][j][1];
并且您需要一个用于收集临时对象的数组。 这必须返回。
function transformEmployeeData(array) { var result = [], obj; for (var i = 0; i < array.length; i++) { obj = {}; for (var j = 0; j < array[i].length; j++) { obj[array[i][j][0]] = array[i][j][1]; } result.push(obj); } return result; } var array = [[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']], [['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]] console.log(transformEmployeeData(array));
为什么要将数据放入数组? 对象在哪里?
我希望在List
看到一个Employee
对象:
public class Employee {
private final String firstName;
private final String lastName;
private final LocalDate birthDate;
private final String role;
public Employee(String f, String n, LocalDate b, String r) {
this.firstName = f;
this.lastName = n;
this.birthDate = LocalDate.from(b);
}
// add the rest
}
var array = [
[
['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
],
[
['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
]
]
function transformEmployeeData(arr){
var result = {};
arr.forEach(function(subArr, i){
result[i] = {};
subArr.forEach(function(item){
result[i][item[0]] = item[1];
});
});
console.log(result);
}
transformEmployeeData(array);
您需要如下所示的对象数组:
var array = [
[
['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']
],
[
['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']
]
]
function transformEmployeeData(array){
var obj = [];
for(var i = 0; i < array.length; i++){
obj.push({});
for(var j = 0; j < array[i].length; j++){
obj[obj.length - 1][array[i][j][0]] = array[i][j][1];
}
}
return obj;
}
var obj = transformEmployeeData(array);
var result = JSON.stringify(obj);
console.log(result);
输出
[{"firstName":"Joe","lastName":"Blow","age":42,"role":"clerk"},
{"firstName":"Mary","lastName":"Jenkins","age":36,"role":"manager"}]
obj[array[i]array[j][0]] = obj[array[i]array[j][1]];
不起作用有两个方面:
1)您想从array
而不是尚不存在的obj
分配给新对象。
2) array[i]array[j][0]
对您的数组无效。 您只需要使用[j]
而不是array[j]
[j]
例如:对于i = 0,j = 0,您说的是array[0]array[0][0]
但您确实想要array[0][0][0]
。 array[0]array[0]
不是有效的语法( array[0][array[0]][0]
是正确的引用,但不是正确的引用)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.