2017-04-16 68 views
0

我有一個JS數組:將2D表格數據輸入到一個對象數組中的JavaScript

var arr = [["Ashley","2017-01-10",80], 
     ["Ashley","2017-02-10",75], 
     ["Ashley","2017-03-10",85], 
     ["Clara","2017-01-10",90], 
     ["Clara","2017-02-10",82]]; 

,並希望進行嵌套對象的新數組。這個想法是在新的對象中有名稱,時間段和分數。它應該是這樣的:

var newArr = [{"name":"Ashley", "2017-01-10":80, "2017-02-10":75, "2017-03-10":85}, 
       {"name":"Clara", "2017-01-10":90, "2017-02-10":82}]; 

回答

0

您可以使用Array#reduce並使用純JS對象作爲地圖暫時由它們相關的人類名字的對象存儲爲您遍歷您array

var array = [ 
 
    ["Ashley", "2017-01-10", 80], 
 
    ["Ashley", "2017-02-10", 75], 
 
    ["Ashley", "2017-03-10", 85], 
 
    ["Clara", "2017-01-10", 90], 
 
    ["Clara", "2017-02-10", 82] 
 
] 
 

 
var result = [] 
 
array.reduce(function(map, e) { 
 
    map[e[0]] || result.push(map[e[0]] = { name: e[0] }) 
 
    map[e[0]][e[1]] = e[2] 
 
    return map 
 
}, {}) 
 

 
console.log(result)
.as-console-wrapper { min-height: 100%; }

0

您可以使用散列表作爲名稱並用它收集其他數據。

var array = [["Ashley", "2017-01-10", 80], ["Ashley", "2017-02-10", 75], ["Ashley", "2017-03-10", 85], ["Clara", "2017-01-10", 90], ["Clara", "2017-02-10", 82]], 
 
    grouped = array.reduce(function (hash) { 
 
     return function (r, a) { 
 
      if (!hash[a[0]]) { 
 
       hash[a[0]] = { name: a[0] }; 
 
       r.push(hash[a[0]]); 
 
      } 
 
      hash[a[0]][a[1]] = a[2]; 
 
      return r; 
 
     }; 
 
    }(Object.create(null)), []); 
 

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

相關問題