我不确定我在这方面做错了什么。当我尝试运行代码时,它表示这里有一个未定义的:
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);
答案 0 :(得分:2)
一种简单的方法是使用map创建对象数组,并使用forEach分配每个名称/值对。
function transformEmployeeData(arr){
var obj;
return arr.map(a => (a.forEach((a, i) => (obj = !i ? {} : obj, obj[a[0]] = a[1])), obj));
}
或更紧凑的形式
{{1}}
答案 1 :(得分:1)
第二部分你需要一个较少的数组而没有对象。
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));
答案 2 :(得分:0)
为什么要将数据放入数组?对象在哪里?
我希望在Employee
中看到List
个对象:
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
}
答案 3 :(得分:0)
//Get workhorse TypeInfo
var type = asm.ExportedTypes.Single(t => t.Name == "workhorse");
// Create instance of workhorse
var obj = Activator.CreateInstance(type);
// Get FieldInfo WorkLoad
var prop = type.GetField("WorkLoad");
// Get object workhorse.WorkLoad
var list = prop.GetValue(obj);
// Get MethodInfo for Add method
var method = prop.FieldType.GetMethod("Add");
// Call it with new object
method.Invoke(list, new [] { (object)new workitems()});
// Get DoThings methodinfo
var doThings = type.GetMethod("DoThings");
// call it without parameters
doThings.Invoke(obj, new object[0]);
答案 4 :(得分:0)
您需要一个对象数组,如下所示:
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]
不是数组的有效引用。而不是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]
但它不是正确的引用。)