2016-08-04 86 views
2

如何求和共享公共密鑰的對象中的值?我需要爲此使用Lodash,因爲如果這些數組變大,我需要良好的性能。使用Lodash通過鍵求和值

var prjMgrValues = [ 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":12000}, 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":750000}, 
    {"proj_mgr":"Joe ProjManager","submitted_dollars":45000} 
] 

我正在尋找的

[ 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":762000}, 
    {"proj_mgr":"Joe ProjManager","submitted_dollars":45000} 
] 
+14

「走」?你是認真的嗎?你做了什麼? – 1252748

+3

因此,一個在內建工具中添加輔助函數的庫應該比內建工具更快?只是一個小的[測試用例](https://jsfiddle.net/727reyn9/)。擾流板:lodash幅度較慢 – Andreas

+0

@Andreas確實。從OP的角度來看,他們可能不知道如何高效地使用內置工具,所以他們相信lodash會比他們自己寫的東西更好。你的「內建」代碼應該是一個答案。 – 4castle

回答

23

的輸出這是減少用於每個獨特元件的情況下。

我總是使用_.groupBy,然後_.map結果應用減少後的數組。在這種情況下,減少操作是_.sumBy

var prjMgrValues = [ 
 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":12000}, 
 
    {"proj_mgr":"Jack ProjManager","submitted_dollars":750000}, 
 
    {"proj_mgr":"Joe ProjManager","submitted_dollars":45000} 
 
]; 
 

 
var output = 
 
    _(prjMgrValues) 
 
    .groupBy('proj_mgr') 
 
    .map((objs, key) => ({ 
 
     'proj_mgr': key, 
 
     'submitted_dollars': _.sumBy(objs, 'submitted_dollars') })) 
 
    .value(); 
 

 
console.log(output);
<script src="https://cdn.jsdelivr.net/lodash/4.14.1/lodash.min.js"></script>

+0

這種操作非常普遍(因此我回答了)。我最後一次使用它[這裏](http://stackoverflow.com/q/38485493/5743988),並在此之前,我使用它[這裏](http://stackoverflow.com/q/38438645/5743988) 。所以這是一個很好的公式。 – 4castle