2017-08-14 145 views
0

多個屬性我想組和idname數低於陣列集團下劃線

var arr = [ 
     { 
      id: 'A1', 
      name: 'andersson' 
     }, 
     { 
      id: 'A1', 
      name: 'johansson' 
     }, 
     { 
      id: 'A1', 
      name: 'andersson' 
     }, 
    ]; 

預期輸出:

var aggregated = [ 
      { 
       id: 'A1', 
       name: 'andersson', 
       count: 2 
      }, 
      { 
       id: 'A1', 
       name: 'johansson', 
       count: 1 
      } 
     ]; 

這應該是一個基本的任務,但我不能找到任何方便用下劃線做的方法。應該可能以某種方式使用_.groupBy函數。

我的數據集很大,所以性能很重要。

回答

1

您可以先對groupBy進行標識和計數,然後使用map來計算每個值。

var arr = [{ 
 
    id: 'A1', 
 
    name: 'andersson' 
 
}, { 
 
    id: 'A1', 
 
    name: 'johansson' 
 
}, { 
 
    id: 'A1', 
 
    name: 'andersson' 
 
}]; 
 

 
var result = _.chain(arr) 
 
    .groupBy(e => e.id + '|' + e.name) 
 
    .map(e => (e[0].count = e.length, e[0])) 
 

 
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

+0

尼斯。可能使通用,以便對象中的所有屬性分組? – Per

+0

當然https://jsfiddle.net/Lg0wyt9u/2151/ –