[英]Create new array of objects by grouping array of objects based on property value of each object in javascript
[英]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'
按原样添加 { 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" }
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.