2017-01-05 9 views
0

この多次元配列をオブジェクトに変換しようとしていますが、実行すると配列の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++) { 
 
    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

を次のように単一のオブジェクトを作成するために合理的ないないよう機能を変更するオブジェクトの配列でなければなりません値割り当てるvar obj = {};を作成しているあなたのコードを見てくださいそのデータからオブジェクトの配列がより理にかなっています。 –

+2

まあ...各第3レベルのペアは名前、年齢、職業を持っています...もちろん、あなたは最後のものだけを取得します...オブジェクトの配列はオブジェクトではなく最終出力として必要です。それぞれの "人"に他の "キー"を使用し、その中にオブジェクト " –

+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

まず、これは理にかなっています配列に2つの要素がある。だから、オブジェクトの配列を取得しようとする必要があります。

第2にこのプログラムは間違いがありますが間違いがあります。あなたは オブジェクトであり、あなたは、配列はそれが

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