如何从对象数组中的值数组创建新的对象数组。打字稿?

时间:2021-02-18 09:25:13

标签: javascript typescript sorting object multidimensional-array

我在一个对象数组中有一个日期数组,如下所示。我希望为每个单独的日期创建一个新的对象数组。拆分日期并将其余值复制到每个日期中。

 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'
      },
    ]
  },
]

*编辑:

(互联网连接很差,不知何故在我设法完成之前提交了这个问题)

但这是我正在寻找的最终结果:

    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'
    }
  }
];

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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);

resultArray 将是(数组的最后一项被展开以便您可以检查它):

resultArray

编辑

您可以通过以下方式获得相同的结果:

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