@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']]
  • Вопрос задан
  • 620 просмотров
Решения вопроса 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 сент. 2019, в 02:43
500 руб./за проект
19 сент. 2019, в 02:30
2000 руб./за проект
18 сент. 2019, в 23:10
5000 руб./за проект