简体   繁体   English

如何从对象数组中的值数组创建新的对象数组。 TypeScript?

[英]How to create a new array of objects from an array of values in an array of objects. TypeScript?

I have an array of dates in an array of objects like below.我在下面的对象数组中有一组日期。 I wish to create a new array of objects base of each individual date.我希望为每个单独的日期创建一个新的对象数组。 Spliting th dates and duplicate the rest of values into each date.拆分日期并将值的 rest 复制到每个日期中。

 const obj = [
  {
    name: 'John',
    email: 'john@email.com',
    dateTime: [
      {
        date: '26-10-1988',
        start: '10:00',
        end: '10:30'
      },
      {
        date: '27-10-1988',
        start: '10:00',
        end: '10:30'
      },
      {
        date: '29-10-1988',
        start: '10:00',
        end: '10:30'
      },
    ]
  },
  {
    name: 'Mary',
    email: 'mary@email.com',
    dateTime: [
      {
        date: '26-10-1988',
        start: '10:00',
        end: '10:30'
      },
    ]
  },
]

*EDIT: *编辑:

(There was a poor internet connection and somehow this question was submitted before I managed to complete it) (互联网连接不佳,不知何故在我完成之前提交了这个问题)

But here is the end result I'm looking for:但这是我正在寻找的最终结果:

    const newObj = [
  {
    name: 'John',
    email: 'john@email.com',
    dateTime: {
      date: '26-10-1988',
      start: '10:00',
      end: '10:30'
    }
  },
  {
    name: 'John',
    email: 'john@email.com',
    dateTime: {
      date: '27-10-1988',
      start: '10:00',
      end: '10:30'
    },
  },
  {
    name: 'John',
    email: 'john@email.com',
    dateTime: {
      date: '29-10-1988',
      start: '10:00',
      end: '10:30'
    },
  },
  {
    name: 'Mary',
    email: 'mary@email.com',
    dateTime: {
      date: '26-10-1988',
      start: '10:00',
      end: '10:30'
    }
  }
];

You can do something like:您可以执行以下操作:

const newArray = obj.map(i => {
  return i.dateTime.map(dateObj => {
    return {
      name: i.name,
      email: i.email,
      dateTime: dateObj
    };
  });
});

const resultArray = [].concat.apply([], newArray);

console.log(resultArray);

The resultArray will be (last item of array is expanded so you can check it): resultArray将是(数组的最后一项已展开,因此您可以检查它):

结果数组

EDIT编辑

You can achieve the same result with:您可以通过以下方式获得相同的结果:

const resultArray = newArray.flat(1);
console.log(resultArray);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM