【问题标题】:Converting an Array of Objects to an Object of arrays将对象数组转换为数组对象
【发布时间】:2018-12-04 14:17:35
【问题描述】:

假设我有一个对象数组

const data = [{ description: "my frist event", start_time: "11:00", end_time: "12:00", event_day: "22" }, { description: "my second event", start_time: "11:00", end_time: "12:00", event_day: "22" }]

因此,每天都会有一组对象。例如,第 22 天应该在数组中有两个项目。所以结构要采用这种格式

{ 22: [ { description: 'my second event',
   start_time: '11:00',
   end_time: '12:00',
   event_day: '22' }, { description: "my frist event", start_time: "11:00", end_time: "12:00", event_day: "22" } ] }

使用reduce方法

const arrayToObject = (array) =>array.reduce((obj, item) => {
  obj[item.event_day] = [item]
  return obj}, {})
arrayToObject(data)

给我以下输出:

{ 22: [ { description: 'my second event',
   start_time: '11:00',
   end_time: '12:00',
   event_day: '22' } ] }

这只会将最后一项添加到数组中。有没有办法将所有其他对象添加到数组中?

【问题讨论】:

  • 你的回调必须检查obj[item.event_day]是否已经存在。

标签: javascript arrays node.js reactjs javascript-objects


【解决方案1】:

如果累加器对象中不存在event_day对应的数组,则先创建,再将push添加到它:

const data = [{ description: "my frist event", start_time: "11:00", end_time: "12:00", event_day: "22" }, { description: "my second event", start_time: "11:00", end_time: "12:00", event_day: "22" }];
const groupedByDay = data.reduce((a, item) => {
  const { event_day } = item;
  if (!a[event_day]) a[event_day] = [];
  a[event_day].push(item);
  return a;
}, {});
console.log(groupedByDay);

【讨论】:

    【解决方案2】:

    这也应该有效:

    const data = [
      {
        description: 'my frist event',
        start_time: '11:00',
        end_time: '12:00',
        event_day: '22',
      },
      {
        description: 'my second event',
        start_time: '11:00',
        end_time: '12:00',
        event_day: '22',
      },
      {
        description: 'my second event',
        start_time: '11:00',
        end_time: '12:00',
        event_day: '55',
      },
    ];
    
    const reduced = data.reduce(
      (acc, item) => ({
        ...acc,
        [item.event_day]: data.filter((i) => i.event_day === item.event_day),
      }),
      {}
    );
    
    console.log('reduced', reduced);

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 2021-06-16
      • 1970-01-01
      • 2019-10-22
      • 2019-07-29
      • 1970-01-01
      • 2020-06-15
      相关资源
      最近更新 更多