javascript - 如何将以下数组数据分组到上述结构中?

标签 javascript arrays performance ecmascript-6

目前我有一个数组数据结构,如下“实际”下所述。想要以某种方式对其进行分组以获得所需的结构,如下文“预期”中所述。

我尝试使用 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/

相关文章:

javascript - 无法获取属性值 ____ : object is null or undefined

css - 在 SASS 中创建一个集合(数组)用于@for 循环

Javascript 整数数组错误

c - 通过 C 中的函数操作动态数组

javascript - 使用 DynamoDB 的 AWS Lambda 顺序问题

javascript - html 和 jQuery 中增加的复选框类

python - 多维 numpy 数组中列表的频率表

java - 使用代理的性能影响

c++ - 查找表与 if-else

javascript - 移除 JavaScript 样式,让 CSS 接管控制权