目前我有一个数组数据结构,如下“实际”下所述。想要以某种方式对其进行分组以获得所需的结构,如下文“预期”中所述。
我尝试使用 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()
和 Array.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 - 如何将以下数组数据分组到上述结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56136943/