繁体   English   中英

将JavaScript数组转换为对象

[英]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);

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

您需要如下所示的对象数组:

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM