2017-01-05 209 views
0

我想將此多維數組轉換爲對象,但是當我運行它時,我得到數組的第二部分保存到對象中,第一部分丟失。多維數組到對象

如何讓整個數組保存在對象中?

var array = [ 
 
    [ 
 
    ['name', 'John Smith'], 
 
    ['age', 34], 
 
    ['occupation', 'nurse'] 
 
    ], 
 
    [ 
 
    ['name', 'Nico Klein'], 
 
    ['age', 24], 
 
    ['occupation', 'engineer'] 
 
    ] 
 
]; 
 

 
function toObject(arr) { 
 
    var obj = {}; 
 
    for (var j = 0; j < arr.length; j++) { 
 
    for (var i = 0; i < arr[j].length; i++) { 
 
     obj[arr[j][i][0]] = arr[j][i][1]; 
 
    } 
 
    } 
 
    return obj; 
 
} 
 

 
var result = toObject(array); 
 

 
console.log(result);

,並有寫的更好的方法?

+3

它似乎沒有合理的創建一個對象從這些數據。一組對象會更有意義。 –

+2

好吧......每個第三級對都有名字,年齡,職業......所以當然你只會得到最後一個...你需要一組對象作爲你的最終輸出,而不是一個對象......或者對每個「person」使用一些其他的「key」,然後在那個「key」中有一個對象 –

+1

這是因爲'arr [j] [i] [0]'每次迭代都是相同的值,所以它只是覆蓋現有的值。例如'name'就是這樣做:'obj.name ='John Smith''然後'obj.name ='Nico Klein''。 –

回答

2

你已經做得很好,但父母應該是對象的數組,這是有道理的。

var array = [ 
 
    [ 
 
    ['name', 'John Smith'], 
 
    ['age', 34], 
 
    ['occupation', 'nurse'] 
 
    ], 
 
    [ 
 
    ['name', 'Nico Klein'], 
 
    ['age', 24], 
 
    ['occupation', 'engineer'] 
 
    ] 
 
]; 
 

 
function toObject(arr) { 
 
    var obj = []; 
 
    for (var j = 0; j < arr.length; j++) { 
 
    var cur = {}; 
 
    for (var i = 0; i < arr[j].length; i++) { 
 
     cur[arr[j][i][0]] = arr[j][i][1]; 
 
    } 
 
    obj.push(cur); 
 
    } 
 
    return obj; 
 
} 
 

 
var result = toObject(array); 
 
console.log(result);

輸出將在順序:

[ 
    { 
    "name": "John Smith", 
    "age": 34, 
    "occupation": "nurse" 
    }, 
    { 
    "name": "Nico Klein", 
    "age": 24, 
    "occupation": "engineer" 
    } 
] 

而且它已經從原來的陣列中的所有記錄。如果您仍想將結果數組轉換爲對象,請參閱Convert Array to Object

var array = [ 
 
    [ 
 
    ['name', 'John Smith'], 
 
    ['age', 34], 
 
    ['occupation', 'nurse'] 
 
    ], 
 
    [ 
 
    ['name', 'Nico Klein'], 
 
    ['age', 24], 
 
    ['occupation', 'engineer'] 
 
    ] 
 
]; 
 

 
function toObject(arr) { 
 
    var obj = []; 
 
    for (var j = 0; j < arr.length; j++) { 
 
    var cur = {}; 
 
    for (var i = 0; i < arr[j].length; i++) { 
 
     cur[arr[j][i][0]] = arr[j][i][1]; 
 
    } 
 
    obj.push(cur); 
 
    } 
 
    return obj; 
 
} 
 

 
var result = toObject(array); 
 
var resObj = result.reduce(function(acc, cur, i) { 
 
    acc[i] = cur; 
 
    return acc; 
 
}, {}); 
 
console.log(resObj);

的最終目標輸出將爲您提供:

{ 
    "0": { 
    "name": "John Smith", 
    "age": 34, 
    "occupation": "nurse" 
    }, 
    "1": { 
    "name": "Nico Klein", 
    "age": 24, 
    "occupation": "engineer" 
    } 
} 
0

你應該嘗試在數組轉換首先要「對象數組」,這是有道理的,因爲你數組中有兩個元素。所以你應該嘗試獲取數組對象。

其次,這個程序是正確的,但有一個錯誤。看看你的代碼,你 已經創建了一個var obj = {};這是一個對象,並要指定數組值應該是對象的數組,以便更改功能如下

function toObject(arr) { 
    var arrOfObj = []; 
    for (var j = 0; j < arr.length; j++) { 
    var curObj = {}; 
    for (var i = 0; i < arr[j].length; i++) { 
     curObj[arr[j][i][0]] = arr[j][i][1]; 
    } 
    arrOfObj.push(cur); 
    } 
    return arrOfObj; 
}