@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']]
  • Вопрос задан
  • 659 просмотров
Решения вопроса 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 не вариант, т.к. количество элементов может быть неодинаковым для разных дней


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

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

Войти через центр авторизации
Похожие вопросы