Как фильтровать вложенный массив объектов по дате

#javascript

Вопрос:

У меня есть массив, подобный этому:

 const data =  [
  {
    id: '3499934913',
    user_data: {
      user_data_stays: [
        {
          value: '30.0',
          date: '2021-10-01T12:55:00.000Z',
        },
        {
          value: '30.0',
          date: '2021-11-01T12:55:00.000Z',
        },
        {
          value: '30.0',
          date: '2021-13-01T12:55:00.000Z',
        }
      ],
    }
  },
  {
    id: '43534535',
    user_data: {
      user_data_stays: [
        {
          value: '30.0',
          date: '2021-11-01T12:55:00.000Z',
        },
        {
          value: '30.0',
          date: '2021-12-01T12:55:00.000Z',
        },
        {
          value: '30.0',
          date: '2021-13-01T12:55:00.000Z',
        }
      ],
    }
  },
]

 

Как я могу сохранить структуру всего массива, но фильтровать user_data_stays только те объекты, дата которых равна 2021-10-01T12:55:00.000Z ?

Я попытался использовать фильтр и некоторые другие, но я не могу добраться до вложенного элемента внутри. Я думаю, что проблема в количестве вложенности, и я не могу с этим справиться. Я был бы признателен вам за помощь.

Ответ №1:

Вы можете использовать forEach для внешнего массива и запустить метод фильтра для внутреннего массива с помощью деструктурирования, ссылка на объект обновит внешний объект на месте.

 const data = [
  {
    id: "3499934913",
    user_data: {
      user_data_stays: [
        { value: "30.0", date: "2021-10-01T12:55:00.000Z" },
        { value: "30.0", date: "2021-11-01T12:55:00.000Z" },
        { value: "30.0", date: "2021-13-01T12:55:00.000Z" },
      ],
    },
  },
  {
    id: "43534535",
    user_data: {
      user_data_stays: [
        { value: "30.0", date: "2021-11-01T12:55:00.000Z" },
        { value: "30.0", date: "2021-12-01T12:55:00.000Z" },
        { value: "30.0", date: "2021-13-01T12:55:00.000Z" },
      ],
    },
  },
];


data.forEach(({ user_data }) => {
  user_data.user_data_stays = user_data.user_data_stays
    .filter(({ date }) => date === '2021-10-01T12:55:00.000Z');
});

console.log(data);