Как объединить два массива JavaScript в один и группировать по дате - PullRequest
3 голосов
/ 27 апреля 2019

Здравствуйте, я новичок в программировании, и я наткнулся на группирование данных массива по дате из двух массивов.

вот мои массивы:

header = [
    {"2019-04-22": "Sun, Apr 22, 2019"},
    {"2019-04-21": "Sat, Apr 21, 2019"},
]

body = [
    {"2019-04-22": "doing customer support”},
    {"2019-04-22": "reply to emails"},
    {"2019-04-21": "send message to customers"},
]

Как сгруппировать массивы в один массив, как показано ниже

combinearray = {
    "2019-04-22": [
        "Sun, Apr 22, 2019",
        "doing customer support",
        "reply to emails",
    ],
    "2019-04-21": [
        "Sat, Apr 21, 2019",
        "send message to customers",
    ],
}

Группировать два массива данных по дате кажется совсем не простым для меня. Я новичок в программировании на JavaScript. Буду признателен за любые ответы.

Ответы [ 2 ]

4 голосов
/ 27 апреля 2019

Вы можете использовать комбинированные массивы, затем использовать уменьшить

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

let header = [{"2019-04-22": "Sun, Apr 22, 2019"},{"2019-04-21": "Sat, Apr 21, 2019"},]

let body = [{"2019-04-22": "doing customer support"},{"2019-04-22": "reply to emails"},{"2019-04-21": "send message to customers"},]


let final = [...header,...body].reduce((op,inp) => {
  let [key,value] = Object.entries(inp)[0]
  op[key] = op[key] || []
  op[key].push(value)
  return op
},{})

console.log(final)
4 голосов
/ 27 апреля 2019

Вы можете сделать это в следующих шагах:

  • Первое использование concat() для объединения обоих массивов, т.е. header и body
  • Тогда используйте reduce() для этого. И передать пустой объект в качестве второго аргумента (начальное значение аккумулятора).
  • Внутри reduce() обратного вызова используйте Object.keys()[0], чтобы получить дату.
  • Проверьте, не установлена ​​ли дата, если дата еще не является ключом аккумулятора, для нее пусто [].
  • Используйте push() для добавления элементов в массив.

Примечание : Это не удалит ссылку на реальный объект в header и body.

const header = [ {"2019-04-22": "Sun, Apr 22, 2019"}, {"2019-04-21": "Sat, Apr 21, 2019"} ]
const body = [ {"2019-04-22": "doing customer support"}, {"2019-04-22": "reply to emails"}, {"2019-04-21": "send message to customers"}, ]

const res = header.concat(body).reduce((ac,a) => {
  let key = Object.keys(a)[0];
  ac[key] = ac[key] || [];
  ac[key].push(a)
  return ac;
},{})
console.log(res)

Однако, как уже упоминалось в комментариях, нет необходимости иметь объект с ключами. Достаточно простого массива значений этого ключа. Для этого push() a[key] вместо a.

const header = [ {"2019-04-22": "Sun, Apr 22, 2019"}, {"2019-04-21": "Sat, Apr 21, 2019"} ]
const body = [ {"2019-04-22": "doing customer support"}, {"2019-04-22": "reply to emails"}, {"2019-04-21": "send message to customers"}, ]

const res = header.concat(body).reduce((ac,a) => {
  let key = Object.keys(a)[0];
  ac[key] = ac[key] || [];
  ac[key].push(a[key])
  return ac;
},{})
console.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...