Javascript 从深度嵌套的对象数组中创建经过筛选和简化的数据

Javascript 从深度嵌套的对象数组中创建经过筛选和简化的数据,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一些复杂的数据集,需要根据嵌套对象属性值的比较将其简化并拆分为两个不同的数据集 以下是我正在使用的数据结构: [ { object: { id: 123 }, group: [ { events: [ { type: 'type', schedule: [ { time: '2019-10-30T09:30:00+00

我有一些复杂的数据集,需要根据嵌套对象属性值的比较将其简化并拆分为两个不同的数据集

以下是我正在使用的数据结构:

[
  {
    object: { id: 123 },
    group: [
      {
        events: [
          {
            type: 'type',
            schedule: [
              {
                time: '2019-10-30T09:30:00+00:00',
              },
              {
                time: '2019-10-21T21:00:00+00:00',
              }
            ],
          },
          {
            type: 'type',
            schedule: [
              {
                time: '2019-10-24T09:30:00+00:00',
              },
              {
                time: '2019-09-22T21:00:00+00:00',
              },
            ],
          },
        ],
      },
    ],
  },
]
最重要的是根据
time
schedule
值是否在过去或将来,将这些数据分成两个不同的集合(对象数组)。这也将有助于简化整个结构。有很多属性附加到对象上,只要嵌套是逻辑的和可用的,我会很好地在整个对象中添加属性,而不仅仅是挑选重要的属性

因此,对于“过去”的数据来说,这样做是理想的:

[
  {
    id: 123,
    events: [
      {
        type: 'type',
        schedule: [
          {
            time: '2019-10-21T21:00:00+00:00',
          }
        ],
      },
      {
        type: 'type',
        schedule: [
          {
            time: '2019-09-22T21:00:00+00:00',
          }
        ],
      }
    ]
  }
]

我一直在尝试使用不同的数组方法(
filter
map
)来吐出适合我需要的东西,但不知道如何正确操作。主要是如何基于嵌套值进行筛选并复制匹配上的所有嵌套结构。

尝试使用
map
方法和
spread
运算符:

const result = data.map(({object, group}) => 
    ({ ...object, events: group.map(g=> g.events)}));
const数据=
[
{
对象:{id:123},
组:[
{
活动:[
{
类型:“类型”,
附表:[
{
时间:“2019-10-30T09:30:00+00:00”,
},
{
时间:“2019-10-21T21:00:00+00:00”,
}
],
},
{
类型:“类型”,
附表:[
{
时间:“2019-10-24T09:30:00+00:00”,
},
{
时间:“2019-09-22T21:00:00+00:00”,
},
],
},
],
},
],
},
];
const result=data.map(({object,group})=>({…object,events:group.map(g=>g.events)});
log(result)
您需要重新构造数组,在适当的位置迭代对象属性,并根据条件过滤数据

使用下面的代码,您可以获得所有过去事件的数组。您可以相应地修改条件以获取所有未来事件

// mapping from old data array
const pastData = data.map(({object, group}) => ({ 
  // get all properties of the nested "object"
  ...object,

  // map "events" into a new structure
  events: group[0].events.map((event) => (
    {
      // get all other properties
      ...event,

      // include only those "schedule" objects where time is less than current date
      schedule: event.schedule.filter(schedule => new Date(schedule.time) < new Date()),
    }
  )),
}));
//从旧数据数组映射
const pastData=data.map({object,group})=>({
//获取嵌套“对象”的所有属性
对象
//将“事件”映射到新结构中
事件:组[0]。事件。映射((事件)=>(
{
//获取所有其他属性
事件
//仅包括时间小于当前日期的“计划”对象
schedule:event.schedule.filter(schedule=>newdate(schedule.time)
下面是一个工作示例:

const数据=[
{
对象:{id:123},
组:[
{
活动:[
{
类型:“类型”,
附表:[
{
时间:“2019-10-30T09:30:00+00:00”,
},
{
时间:“2020-10-21T21:00:00+00:00”,
}
],
},
{
类型:“类型”,
附表:[
{
时间:“2019-10-24T09:30:00+00:00”,
},
{
时间:“2020-09-22T21:00:00+00:00”,
},
],
},
],
},
],
},
];
const pastData=data.map({object,group})=>({
对象
事件:组[0]。事件。映射((事件)=>(
{
事件
schedule:event.schedule.filter(schedule=>newdate(schedule.time)({
对象
事件:组[0]。事件。映射((事件)=>(
{
事件
schedule:event.schedule.filter(schedule=>newdate(schedule.time)>=newdate())
}
))
}));

log('过去数据:',过去数据',未来数据:',未来数据')