将JavaScript数组转换为对象

时间:2017-01-22 19:06:11

标签: javascript 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);

5 个答案:

答案 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]);

https://plnkr.co/edit/8ZQTsC3SKYTyEvMlrONt?p=preview

答案 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]但它不是正确的引用。)