javascript - 如何将以下数组数据分组到上述结构?
问题描述
目前我有一个数组数据结构,如下面的“实际”下所述。想要以某种方式对其进行分组以获得所需的结构,如下面的“预期”中所述。
我尝试使用 lodash groupBy 、 mapToValues 和 map 将其排列在我想要的结构中,但无法实现。
实际的:
const candyDataSoldByEachDayInYear2000 = [
{
candyName: 'snickers',
data: [{
date: "2000-01-01", sold: 100
}, {
date: "2000-01-02", sold: 110
}]
}, {
candyName: 'kitkat',
data: [{
date: "2000-01-01", sold: 80
}, {
date: "2000-01-02", sold: 70
}]
}, {
candyName: 'twix',
data: [{
date: "2000-01-01", sold: 60
}, {
date: "2000-01-02", sold: 50
}]
}, {
candyName: 'milkyway',
data: [{
date: "2000-01-01", sold: 60
}, {
date: "2000-01-02", sold: 70
}]
}, {
candyName: 'skittles',
data: [{
date: "2000-01-01", sold: 120
}, {
date: "2000-01-02", sold: 110
}]
}];
预期的:
const candyDataSoldByEachDayInYear2000 = [
{
date: "2000-01-01",
candySold: {
snickers: 100,
kitkat: 80,
twix: 60,
milkyway: 60,
skittles: 120
}
},
{
date: "2000-01-02",
candySold: {
snickers: 110,
kitkat: 70,
twix: 50,
milkyway: 70,
skittles: 110
}
}
];
.
解决方案
您可以使用Array.reduce()
withArray.forEach()
创建一个带有日期键的对象,将糖果添加到相关日期,然后转换为数组Array.values()
:
const candyDataSoldByEachDayInYear2000 = [{"candyName":"snickers","data":[{"date":"2000-01-01","sold":100},{"date":"2000-01-02","sold":110}]},{"candyName":"kitkat","data":[{"date":"2000-01-01","sold":80},{"date":"2000-01-02","sold":70}]},{"candyName":"twix","data":[{"date":"2000-01-01","sold":60},{"date":"2000-01-02","sold":50}]},{"candyName":"milkyway","data":[{"date":"2000-01-01","sold":60},{"date":"2000-01-02","sold":70}]},{"candyName":"skittles","data":[{"date":"2000-01-01","sold":120},{"date":"2000-01-02","sold":110}]}];
const result = Object.values(candyDataSoldByEachDayInYear2000.reduce((r, { candyName, data }) => {
data.forEach(({ date, sold }) => {
if(!r[date]) r[date] = { date, candySold: {} };
const cs = r[date].candySold;
cs[candyName] = (cs[candyName] || 0) + sold;
});
return r;
}, {}));
console.log(result);
推荐阅读
- javascript - 数组检查匹配项
- java - 如何从类中的值更新 HashMap 键?
- algorithm - 为什么该算法适用于二次探测?
- c# - 为什么随机数没有正确分散?
- web-scraping - 挣扎于 Scrapy 分页
- java - 如何在app中提取网站的html代码
- javascript - 函数将一行作为字符串附加到表中
- mongodb - 在使用 GORM mongoDB 插件的 Grails 应用程序中配置 MongoDatastore 类的 bean 覆盖的最佳方法是什么?
- apache-spark - PySpark:aggregate() 正好需要 4 个参数(给定 3 个)
- google-sheets - 在文本字符串中的任何值出现在 Google 表格中之前和之后添加文本字符串