Javascript Проверьте наличие дубликатов объектов в массиве и объедините значения в массив - PullRequest
0 голосов
/ 03 мая 2018

я борюсь с проблемой.

У меня есть массив объектов, и он выглядит так:

[
    {date_range_one: '2018-03-03+-+2018-05-01'},
    {date_range_two: '2001-11-27+-+2018-05-01'},
    {filter: '1'},
    {filter: '4'},
    {filter: '18'},
]

и мне нужно преобразовать это в:

[
    {date_range_one: '2018-03-03+-+2018-05-01'},
    {date_range_two: '2001-11-27+-+2018-05-01'},
    {filter: [1,3,18]},
] 

Object.assign переопределит значения фильтра до последнего ({filter: 18}), но мне нужно объединить их в (Array или String).

Есть ли способ сделать это без какой-либо библиотеки js?

Приветствия

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

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

Он работает с использованием ключа и значения объекта и устанавливает либо массив в качестве значения, либо значение itselft.

Для получения массива объектов выполняется сопоставление, в котором объект создается с ключом и значением.

var data = [{ date_range_one: '2018-03-03+-+2018-05-01' }, { date_range_two: '2001-11-27+-+2018-05-01' }, { filter: '1' }, { filter: '4' }, { filter: '18' }],
    result = Array.from(
        data.reduce((m, o) => {
            var [key, value] = Object.entries(o)[0],
                item = m.get(key);
        
            return m.set(key, item ? [].concat(item, value) : value);
        }, new Map),
        ([k, v]) => ({ [k]: v })
    );

console.log(Array.from(result));
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 03 мая 2018

Просто используя цикл for:

const array = [
    {date_range_one: '2018-03-03+-+2018-05-01'},
    {date_range_two: '2001-11-27+-+2018-05-01'},
    {filter: '1'},
    {filter: '4'},
    {filter: '18'},
];

const set = {}

for (const entry of array) {
  const key = Object.keys(entry)[0];
  const value = entry[key];
  if (set.hasOwnProperty(key)) {
    set[key] = [...set[key], value];
  } else {
    set[key] = value;
  }
}

const result = Object.entries(set)
  .map(([key, value]) => ({[key]: value}))

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