Лучший способ реструктуризации объекта в JS - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть массив объектов, свойства даты и времени ширины, как показано ниже. Я пытаюсь реструктурировать элементы по дням и времени.

[
  {
    data: 'data1',
    date: '15-02-2020 06:00:00'
  },
  {
    data: 'data2',
    date: '15-02-2020 12:00:00'
  },
  ...
  {
    data: 'data6',
    date: '17-02-2020 07:00:00'
  },
  {
    data: 'data7',
    date: '17-02-2020 09:00:00'
  }
]

Я хочу получить это:

{
  '15-02-2020' : {
    '06:00:00' : 'data1',
    '12:00:00' : 'data2'
  },
  '16-02-2020' : {
    '06:00:00' : 'data3',
    '12:00:00' : 'data4'
  },
  '17-02-2020' : {
    '01:00:00' : 'data5',
    '07:00:00' : 'data6',
    '09:00:00' : 'data7'
  }
}

Я пытался использовать reduce, но не могу. Я хочу сделать это, без временных переменных в одном l oop.

list.reduce((obj, item) => Object.assign(obj, {[item.date]: item}), {});

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

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

var data = [{ data: 'data1', date: '15-02-2020 06:00:00' }, { data: 'data2', date: '15-02-2020 12:00:00' }, { data: 'data6', date: '17-02-2020 07:00:00' }, { data: 'data7', date: '17-02-2020 09:00:00' }],
    result = data.reduce((r, { data, date }) => {
        const [day, time] = date.split(' ');
        r[day] = r[day] || {};
        r[day][time] = data;
        return r;
    }, {});

console.log(result);
2 голосов
/ 17 февраля 2020

Просто пройдите через ваш массив oop и динамически создайте объект результата:

const arr = [
  {
    data: 'data1',
    date: '15-02-2020 06:00:00'
  },
  {
    data: 'data2',
    date: '15-02-2020 12:00:00'
  },
  {
    data: 'data6',
    date: '17-02-2020 07:00:00'
  },
  {
    data: 'data7',
    date: '17-02-2020 09:00:00'
  }
]

const res = {}

arr.forEach(item => {
  const dateArr = item.date.split(' ')
  if (res[dateArr[0]]) {
    res[dateArr[0]][dateArr[1]] = item.data
  } else {
    res[dateArr[0]] = {}
    res[dateArr[0]][dateArr[1]] = item.data
  }
})

console.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...