0

一部の従業員データをあるフォーマットから別のフォーマットに変換する関数を記述します。ネストされたサブアレイを配列内のオブジェクトのキー/値の組に変換する

引数は、次のようになります:

[ 
    [ 
    ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk'] 
    ], 
    [ 
    ['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager'] 
    ] 
] 

が入力、戻り値は次のようになりますことを考える:

[ {firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk'}, 
    {firstName: 'Mary', lastName: 'Jenkins', age: 36, role:'manager'}] 

私は、これが最も効率的なコードが、私ではありません知っていますオブジェクトの各反復を格納する新しい配列を取得することはできません。私は必ずしも新しい配列が必要なわけではありません。どのように私は "人"として記録されているものを取って、例の出力のような配列に入れますか?

function keyValue(){ 
var arr3 = []; 
var person = {}; 

for (var i = 0; i < arr.length; i++){ 
    for (var j = 0; j < arr[i].length; j++){ 
     var key = arr[i][j][0]; 
     var val = arr[i][j][1]; 
     person[key] = val; 
     } 
    arr3[i] = person; 
    } 
    console.log(person) // desired output, but not returned 
    return arr3;  // either only one instance "joe" or 2 
         // "marys" depending on where I return 
} 
keyValue(arr) 

//console.logged() 
    { firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk' } 
{ firstName: 'Mary', 
    lastName: 'Jenkins', 
    age: 36, 
    role: 'manager' } 

//returned 
=> [ { firstName: 'Mary', 
    lastName: 'Jenkins', 
    age: 36, 
    role: 'manager' }, 
    { firstName: 'Mary', 
    lastName: 'Jenkins', 
    age: 36, 
    role: 'manager' } ] 

答えて

0

各アレイにpersonオブジェクトを作成する必要があります。二forループ

var arr = [ 
 
    [ 
 
    ['firstName', 'Joe'], 
 
    ['lastName', 'Blow'], 
 
    ['age', 42], 
 
    ['role', 'clerk'] 
 
    ], 
 
    [ 
 
    ['firstName', 'Mary'], 
 
    ['lastName', 'Jenkins'], 
 
    ['age', 36], 
 
    ['role', 'manager'] 
 
    ] 
 
] 
 

 
function keyValue(arr) { 
 
    var arr3 = []; 
 
    for (var i = 0; i < arr.length; i++) { 
 
    var person = {}; 
 
    for (var j = 0; j < arr[i].length; j++) { 
 
     var key = arr[i][j][0]; 
 
     var val = arr[i][j][1]; 
 
     person[key] = val; 
 
    } 
 
    arr3[i] = person; 
 
    } 
 
    return arr3; 
 
} 
 

 
var res = keyValue(arr); 
 
console.log(res);

前に、forループ内var person = {}を移動しますが、代わり.map()for..ofループ

var arr = [ 
 
    [ 
 
    ['firstName', 'Joe'], 
 
    ['lastName', 'Blow'], 
 
    ['age', 42], 
 
    ['role', 'clerk'] 
 
    ], 
 
    [ 
 
    ['firstName', 'Mary'], 
 
    ['lastName', 'Jenkins'], 
 
    ['age', 36], 
 
    ['role', 'manager'] 
 
    ] 
 
]; 
 

 
var res = arr.map(array => { 
 
    var obj = {}; 
 
    for (var [key, value] of array) { 
 
    obj[key] = value 
 
    } 
 
    return obj 
 
}); 
 

 
console.log(res);

+0

感謝を使用することができます。 "=>"とは何ですか? – sopstem2428

+0

[矢印関数](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)、[矢印関数と関数宣言/式:同等か交換可能か]を参照してください。 (http://stackoverflow.com/questions/34361379/arrow-function-vs-function-declaration-expressions-are-they-equivalent-exch) – guest271314

+0

私のコードで間違っていたので、ログに記録された値と違う? @ guest271314 – sopstem2428

関連する問題