簡體   English   中英

如何根據屬性值合並 2 個對象以創建新的 object?

[英]How to merge 2 objects based on a property value to create new object?

請參閱下面的原始數據集:

[
    {
        "date": "2021-12-03",
        "minutes": 132.00001,
        "category": "RSVR"
    },
    {
        "date": "2021-12-03",
        "minutes": 4.95,
        "category": "DMND"
    },
    {
        "date": "2021-12-03",
        "minutes": 127.03218,
        "category": "SLIP"
    },
    {
        "date": "2021-12-04",
        "minutes": 113.97533,
        "category": "SLIP"
    },
    {
        "date": "2021-12-04",
        "minutes": 11.55,
        "category": "DMND"
    },
    {
        "date": "2021-12-04",
        "minutes": 105.30001,
        "category": "RSVR"
    }
]

預期
想生成新數組,其中:

  • 具有category: 'DMND'按原樣添加
  • 新的 object 是使用結構創建的(下面提供了新的 object 的示例):
    •  { date: unique date from the objects with category: 'RSVR' and category: 'SLIP' minutes: add minutes from category: 'RSVR' and category: 'SLIP' category: 'SPLY' }
       Example { "date": "2021-12-03", "minutes": 132.00001, "category": "RSVR" { }, "date": "2021-12-03", { = "minutes": 259.03219, "date": "2021-12-03", "category": "SPLY" "minutes": 127.03218, } "category": "SLIP" }
    (基本上合並 2 個具有category: 'RSVR'category: 'SLIP'的對象,方法是添加它們的minutes以創建新的 object 並將新的 object 添加到陣列中)
New array will look like this:
[
    {
        "date": "2021-12-03",
        "minutes": 4.95,
        "category": "DMND"
    },
    {
        "date": "2021-12-03",
        "minutes": 259.03219,
        "category": "SPLY"
    },
    {
        "date": "2021-12-04",
        "minutes": 11.55,
        "category": "DMND"
    },
    {
        "date": "2021-12-04",
        "minutes": 219.275331,
        "category": "SPLY"
    }
]

不太清楚如何 go 關於這樣做呢。 任何幫助,將不勝感激

我相信可能有一個更簡單的解決方案,但是如果找到一個或另一個,這將使用 reduce 和 combine 。

 var inputs = [{ "date": "2021-12-03", "minutes": 132.00001, "category": "RSVR" }, { "date": "2021-12-03", "minutes": 4.95, "category": "DMND" }, { "date": "2021-12-03", "minutes": 127.03218, "category": "SLIP" }, { "date": "2021-12-04", "minutes": 113.97533, "category": "SLIP" }, { "date": "2021-12-04", "minutes": 11.55, "category": "DMND" }, { "date": "2021-12-04", "minutes": 105.30001, "category": "RSVR" } ]; var results = Object.values(inputs.reduce((o, item) => { o[item.date] = o[item.date] || {}; if (["RSVR", "SLIP"].includes(item.category)) { const opp = item.category === "SLIP"? "RSVR": "SLIP"; if (o[item.date][opp]) { o[item.date][opp].minutes += item.minutes; o[item.date][opp].category = 'SPLY'; return o; } } o[item.date][item.category] = item return o; }, {})).flatMap(x => Object.values(x)); console.log(results);

我們可以使用Array.reduce按日期和類別對條目進行分組。 我們可以使用categoryMap到 map 輸入到 output 類別。

如果 output 類別匹配,我們將總結每個條目的分鍾數。

 let input = [ { "date": "2021-12-03", "minutes": 132.00001, "category": "RSVR" }, { "date": "2021-12-03", "minutes": 4.95, "category": "DMND" }, { "date": "2021-12-03", "minutes": 127.03218, "category": "SLIP" }, { "date": "2021-12-04", "minutes": 113.97533, "category": "SLIP" }, { "date": "2021-12-04", "minutes": 11.55, "category": "DMND" }, { "date": "2021-12-04", "minutes": 105.30001, "category": "RSVR" } ] const categoryMap = { DMND: 'DMND', RSVR: 'SPLY', SLIP: 'SPLY' }; const result = Object.values(input.reduce((acc, { date, minutes, category }) => { const key = `${date}-${categoryMap[category]}`; acc[key] = acc[key] || { date, category: categoryMap[category], minutes: 0 }; acc[key].minutes += minutes; return acc; }, {})); console.log(result)
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暫無
暫無

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

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