簡體   English   中英

如何按鍵填充集合數組並對值求和 Lodash.js

[英]How to fill the array of sets by key and sum the values Lodash.js

我正在使用JSLoDash庫。

我從服務器收到的數據如下所示:

const statsToSort = [
{name: "critA", value: 11111},
{name: "critA", value: 11},
{name: "critA", value: 221},
{name: "critA", value: 54},
{name: "critB", value: 1222},
{name: "critC", value: 231},
{name: "critD", value: 323},
{name: "critC", value: 0},
]

我需要重新排列它,對相同鍵的值求和並重新組織它。 為此,我創建了以下數組:

let finalStats = [{ "critA": 0 }, { "critB": 0 }, { "critC": 0 }, { "CritD": 0 }];

我正在嘗試使用 Lodash 庫來填充名稱的 finalStats 跳躍並對值求和。

我目前的function是這樣的:

function mergeNames(arr) {
    return _.chain(arr).groupBy('name').mapValues(function (v) {
        return _.sum(v);
    })

預期的結果應該是這樣的:

/**
statsToSort:[
{name: "critA", value:11397},
{name: "critB", value:1222},
{name: "critC", value:231},
{name: "critD", value:323}, 
*/

到目前為止,我展示的 function 確實……什么都沒有。 就像,完全一樣。 它甚至不按鍵對數組進行排序。

問:你能幫幫我嗎

  • 修改 function 得到我提到的結果
  • 可能會向 function 添加另一層,以便考慮到名稱可能未按字母順序排列並且 statsToSort 可能不包含要在 finalStats 中填充的一個或幾個名稱,它會填充 finalStats 數組。

提前致謝

您可以使用 map 並獲得總和值。

 const statsToSort = [{ name: "critA", value: 11111 }, { name: "critA", value: 11 }, { name: "critA", value: 221 }, { name: "critA", value: 54 }, { name: "critB", value: 1222 }, { name: "critC", value: 231 }, { name: "critD", value: 323 }, { name: "critC", value: 0 }], result = Array.from( statsToSort.reduce((m, { name, value }) => m.set(name, (m.get(name) || 0) + value), new Map), ([name, value]) => ({ name, value }) ).sort((a, b) => a.name.localeCompare(b.name)); console.log(result);

這似乎可以滿足您的要求:

 const statsToSort = [ {name: "critA", value: 11111}, {name: "critA", value: 11}, {name: "critA", value: 221}, {name: "critA", value: 54}, {name: "critB", value: 1222}, {name: "critC", value: 231}, {name: "critD", value: 323}, {name: "critC", value: 0}, ] let mergeNames = arr => _(arr).groupBy('name').mapValues(vals => ({ name: vals[0].name, value: _.sumBy(vals, 'value') })).value() let finalStats = mergeNames(statsToSort) console.log(finalStats)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM