Как проверить и классифицировать, если ключ в массиве json имеет такое же значение? - PullRequest
0 голосов
/ 24 марта 2020

Я хочу классифицировать встречи в одно и то же время на разные группы. Как это сделать?

Мне удалось идентифицировать встречи в одно и то же время и поместить их во временный массив.

Но все они поступают во временном массиве.

Ниже приведен ответ.

[
  {
    "id": "1081",
    "endDate": "2020-03-24T12:30:00.000Z",
    "startDate": "2020-03-24T12:00:00.000Z",
    "title": "Meeting 1"
  },
  {
    "id": "1073",
    "endDate": "2020-03-24T13:00:00.000Z",
    "startDate": "2020-03-24T12:30:00.000Z",
    "title": "Meeting 2"
  },
  {
    "id": "1082"
    "endDate": "2020-03-24T12:30:00.000Z",
    "startDate": "2020-03-24T12:00:00.000Z",
    "title": "Event 2",
  },
  {
    "id": "1083"
    "endDate": "2020-03-24T13:00:00.000Z",
    "startDate": "2020-03-24T12:30:00.000Z",
    "description": "",
    "title": "event 1",
  },
  {

    "id": "1050",
    "endDate": "2020-03-25T13:00:00.000Z",
    "startDate": "2020-03-25T12:30:00.000Z",
    "title": "event 2",
  }
]

Я использовал следующий фрагмент для получения встреч с одинаковым временем.

events.sort(function(a, b) {
              return a.startDate < b.startDate
                ? -1
                : a.startDate > b.startDate
                ? 1
                : 0;
            });
            for (let i = 0; i < events.length; i++) {
              const startDate = events[i].startDate;
              for (let j = i + 1; j < events.length; j++) {
                const startDateNext = events[j].startDate;

                if (startDate === startDateNext) {
                  console.log("ONCE: ", events[j]);
                  flag++;
                  console.log('Array Element %d and %d are equal', i, j);

                }
              }
            }
            console.log('\nThe Equal Numbers In The Array Are = %d', flag);
            console.log('All Events: ', JSON.stringify(events));
            console.log('Events same time: ', eventsWithSameTime);

Вывод:

Элемент массива 0 и 2 равны

Элемент массива 1 и 3 равны

Элемент массива 1 и 4 равен

Элементы массива 3 и 4 равны

Я хочу групповые встречи, такие как: [0,2] & [1,3,4]

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Вы можете использовать уменьшение и сгруппировать их по дате начала. Это даст вам встречи, которые сгруппированы вместе.

var meetings = [
  {
    "id": "1081",
    "endDate": "2020-03-24T12:30:00.000Z",
    "startDate": "2020-03-24T12:00:00.000Z",
    "title": "Meeting 1"
  },
  {
    "id": "1073",
    "endDate": "2020-03-24T13:00:00.000Z",
    "startDate": "2020-03-24T12:30:00.000Z",
    "title": "Meeting 2"
  },
  {
    "id": "1082",
    "endDate": "2020-03-24T12:30:00.000Z",
    "startDate": "2020-03-24T12:00:00.000Z",
    "title": "Event 2",
  },
  {
    "id": "1083",
    "endDate": "2020-03-24T13:00:00.000Z",
    "startDate": "2020-03-24T12:30:00.000Z",
    "description": "",
    "title": "event 1",
  },
  {

    "id": "1050",
    "endDate": "2020-03-25T13:00:00.000Z",
    "startDate": "2020-03-25T12:30:00.000Z",
    "title": "event 2",
  }
]

var grouped = meetings.reduce( function (obj, meeting) {
  var startDate = meeting.startDate
  obj[startDate] = obj[startDate] || []
  obj[startDate].push(meeting)
  return obj
}, {})

console.log(grouped)
0 голосов
/ 24 марта 2020

Если вам известны разные даты. Вы можете написать такую ​​функцию с методом фильтра

let arrayEvent1 = meetings.filter((el) => {
  return el.startDate === "2020-03-24T12:00:00.000Z"
});

let arrayEvent2 = meetings.filter((el) => {
  return el.startDate === "2020-03-24T12:30:00.000Z"
});

Если вы не знаете, вы можете использовать решение @ epascarello

Это создает объект массива со всеми различными наборами сеансов

var grouped = meetings.reduce( function (obj, meeting) {
  var startDate = meeting.startDate
  obj[startDate] = obj[startDate] || []
  obj[startDate].push(meeting)
  return obj
}, {})

enter image description here

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