2017-10-24 9 views
0

私は、オブジェクトに2D配列を移入するのにかなりの時間を費やすことを試みてきました。私は_.map()を使ってみましたが、私が期待していた結果を私に与えませんでした。多次元配列をJavaScriptでマルチディメンションオブジェクトに取り込む方法は?

私が格納された配列があります。

// My array 
var myArray = [ [foo, bar, fiz], [faz, far, fee] ]; 

// My object 
var myObject = { 
    key1: { 
     val1: 1, 
     val2: 2, 
     val3: 3 
    }, 
    key2: { 
     val1: 1, 
     val2: 2, 
     val3: 3 
    } 
} 

そして、私が達成しようとしている結果を次のとおりです。ここで

var myObject = { 
    key1: { 
     val1: foo, 
     val2: bar, 
     val3: fiz 
    }, 
    key2: { 
     val1: faz, 
     val2: far, 
     val3: fee 
    } 
} 

私がこれまでに得たもの:

_.map(myObj, x => { 
    for (var i = 0; myArray.length; i++) { 
     x.val1 = myArray[i][0]; 
     x.val2 = myArray[i][1]; 
     x.val3 = myArray[i][2]; 
    } 
} 

私が遭遇した問題_.map()私はそれを1回だけ反復したい。配列とオブジェクトの長さは同じなので、2回繰り返す必要はないと思います。残念ながら、私の配列には私がそれを区別するために使うことができるキーがありません、そうでなければ私はObject.assign()を使っていました。

+0

常にキー 'key1'と' val1'ある、またはそれらは異なっていますか? –

答えて

3

オブジェクトの元の値が破棄され、オブジェクトのキーを容易に再現することができますので、あなたは2つのArray#reduce方法を使用して配列からオブジェクトを構築することができますについては

var myArray = [ ['foo', 'bar', 'fiz'], ['faz', 'far', 'fee'] ]; 
 

 
var myObject = myArray.reduce(function(obj, arr, i) { 
 
    obj['key' + (i + 1)] = arr.reduce(function(o, item, j) { 
 
    o['val' + (j + 1)] = item; 
 
    return o; 
 
    }, {}); 
 
    
 
    return obj; 
 
}, {}); 
 

 
console.log(myObject);

+1

reduce関数の使用例は非常に良いです。 – Akxe

0

を変換するには、配列ごとに二重のネストループが必要です。次に、キーを生成し、オブジェクトとコンテンツを構築します。変数キーについては

var array = [['foo', 'bar', 'fiz'], ['faz', 'far', 'fee']], 
 
    object = {}; 
 
    
 
array.forEach(function (a, i) { 
 
    var key = 'key' + (1 + i); 
 
    object[key] = object[key] || {}; 
 
    a.forEach(function (b, j) { 
 
     object[key]['val' + (1 + j)] = b; 
 
    }) 
 
}); 
 

 
console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

、あなたはいくつかのキーで配列を使用し、外側と内側のレベルのためにそれを取ることができます。

var array = [['foo', 'bar', 'fiz'], ['faz', 'far', 'fee']], 
 
    topKeys = ['key1', 'key2'], 
 
    subKeys = ['val1', 'val2', 'val3'], 
 
    object = {}; 
 
    
 
array.forEach(function (a, i) { 
 
    object[topKeys[i]] = object[topKeys[i]] || {}; 
 
    a.forEach(function (b, j) { 
 
     object[topKeys[i]][subKeys[j]] = b; 
 
    }) 
 
}); 
 

 
console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題