@nvdfxx
Senior Pomidor developer

Как разбить массив на подмассивы?

По апи приходит массив данных о погоде на 5 дней вперед в виде 40-ка элементов вида
//первый элемент
{
    clouds: {all: 65},
    dt: 1566464400,
    dt_txt: "2019-08-22 09:00:00",
    main: {temp: 300.07, temp_min: 299.231, temp_max: 300.07, pressure: 1020.46, sea_level: 1020.46, …},
    sys: {pod: "d"},
    weather: [{…}],
    wind: {speed: 2.81, deg: 71.797}
}
//Второй элемент
{
    clouds: {all: 79},
    dt: 1566475200,
    dt_txt: "2019-08-22 12:00:00",
    main: {temp: 301.14, temp_min: 300.566, temp_max: 301.14, pressure: 1020.44, sea_level: 1020.44, …},
    sys: {pod: "d"},
    weather: [{…}],
    wind: {speed: 2.54, deg: 89.121}
}

//последний элемент
{
    clouds: {all: 5},
    dt: 1566885600,
    dt_txt: "2019-08-27 06:00:00",
    main: {temp: 287, temp_min: 287, temp_max: 287, pressure: 1028.08, sea_level: 1028.08, …},
    sys: {pod: "d"},
    weather: [{…}],
    wind: {speed: 4.37, deg: 350.758}
}


Как разбить этот массив на 5 подмассивов с погодой только на один день? Поделить массив на 5 не вариант, т.к. количество элементов может быть неодинаковым для разных дней
//out: [['погода на 22-08'], ..., ['погода на 27-08']]
  • Вопрос задан
  • 1069 просмотров
Решения вопроса 1
@khorark
Можно сделать так

const result = data.reduce((res, el) => {
	const date = new Date(el.dt * 1000);
  if (date) {
  	const dateKey = `${date.getDate()}/${(date.getMonth() + 1)}/${date.getFullYear()}`;
    if (res[dateKey]) {
    	res[dateKey].push(el);
    } else {
        res[dateKey] = [el];
    }
  }
  
  return res;
}, {})

console.log(Object.values(result))
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
const splitted = arr.reduce((acc, cur) => {
  const { dt } = cur;
  return { ...acc, [dt]: [...(acc[dt] || []), cur] };
}, {});
const result = Object.values(splitted); // если надо массив
Ответ написан
Комментировать
Sirion
@Sirion
Создать объект (или Map), где ключами будут дни, а значениями - массивы погодных данных за эти дни. Изначально там ни ключей, ни значений. Перебираем элементы массива. Смотрим день. Если такого ключа ещё нет, создаём свойство с этим ключом, значение - пустой массив. Затем добавляем в этот массив текущий элемент. Если такой ключ есть - просто добавляем текущий элемент.
Ответ написан
Комментировать
Поделить массив на 5 не вариант, т.к. количество элементов может быть неодинаковым для разных дней


Делить на длину массива?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 14:10
500 руб./за проект
19 апр. 2024, в 13:31
10000 руб./за проект