繁体   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