2017-03-02 19 views
-1

ソース多次元配列を持っています。 それは次のようになります。私はES6機能を使用してフラットな配列にこれを変換する必要が多次元配列をES6でオブジェクトのフラット配列に変換するベストプラクティス

var arr = []; 
arr[1] = []; 
arr[2] = []; 
arr[3] = []; 
arr[1][1] = "11"; 
arr[1][2] = "12"; 
arr[1][3] = "13"; 
arr[2][1] = "21"; 
arr[2][2] = "22"; 
arr[2][3] = "23"; 
arr[3][1] = "31"; 
arr[3][2] = "32"; 
arr[3][3] = "33"; 

。 結果必見は、次のようになります

var res = [ 
    { col:1, row:1, val:"11"}, 
    { col:1, row:2, val:"12"}, 
    { col:1, row:3, val:"13"}, 
    { col:2, row:1, val:"21"}, 
    { col:2, row:2, val:"22"}, 
    { col:2, row:3, val:"23"}, 
    { col:3, row:1, val:"31"}, 
    { col:3, row:2, val:"32"}, 
    { col:3, row:3, val:"33"} 
]; 
+0

インデックスを開始なぜ1ですか? – laser

+1

2番目のコードは有効なjsではありません。[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects) 'と': ' – Gintoki

答えて

4

あなたは新しいオブジェクトのためにArray#reduceArray#forEachを使用することができます。

var arr = [, [, '11', '12', '13'], [, '21', '22', '23'], [, '31', '32', '33']], 
 
    result = arr.reduce((r, a, i) => (a.forEach((b, j) => r.push({ col: i, row: j, val : b})), r), []); 
 

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