2017-01-22 200 views
0

我不確定我在做什麼錯誤。當我嘗試運行代碼時,它說這裏有一個未定義的: obj[array[i]array[j][0]] = obj[array[i]array[j][1]];將JavaScript數組轉換爲對象

有人可以解釋我在做什麼不正確嗎? 我找生成目標回報,看起來像

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

似乎是[此](http://stackoverflow.com/q/41784272/4543207) – Redu

+0

的精確副本@Redu - 同意。看起來它可能是功課。 – mseifert

回答

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));

+0

謝謝妮娜,你能解釋爲什麼我不需要寫數組[j]嗎? – wwang8421

+0

你得到一個非命名數組,而不是一個變量。 –

0

爲什麼你把數據放到一個數組?對象在哪裏?

我希望看到的ListEmployee對象:

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 
} 
0
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

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]是,但它不是一個正確的參考)。

2

一個簡單的方法是使用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)); 
}