使用 Lodash 按键对值求和

IT技术 javascript lodash
2021-03-02 17:32:13

如何对共享公共键的对象中的值求和?需要为此使用 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}
]
1个回答

这是对每个唯一元素进行归约的情况。

我总是使用_.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>

这种操作真的很常见(所以我回答)。我最后一次使用它是在这里,在之前我在这里使用它因此,这是一个值得牢记的好公式。
2021-05-21 17:32:13