Разделение массива объектов на основе уникальных комбинаций двух свойств - PullRequest
0 голосов
/ 03 декабря 2018

Для моего приложения для отслеживания времени я храню записи времени в массиве объектов, каждый из которых выглядит следующим образом:

{
  date: "20181206",
  hours: "4",
  projectId: "65WchP9X46HlOYUzmWrL",
  taskId: "fJTU7wggJHbg1uRuRUdHjS5mn8J3"
}

Мне нужно сгруппировать в отдельные массивы все объекты по уникальным комбинациямProjectId - TaskId свойств, так что каждый результирующий массив получает все записи для одного конкретного проекта и одной конкретной задачи (массив для project #1 / task #1, другой для project #1 / task #2, другой для project #2 / task #1 и т. Д.).

Я знаю, как сделать это с одним свойством, но есть ли простой способ добиться того же с двумя свойствами?

Примечание: мой глобальныйМассив изначально заполняется так:

weekTimes = [];
querySnapshot.forEach((doc) => {
  weekTimes.push(doc.data());
});

1 Ответ

0 голосов
/ 03 декабря 2018

Создайте составной ключ из projectId и taskId:

grouped = {}

for (weekTime of weekTimes) {
  var key = `${weekTime.projectId}/${weekTime.taskId}`

  if (grouped[key] === undefined) {
    // if the key doesn't exist, weekTime is the first item, create the key 
    // and assign an array with the first item to it
    grouped[key] = [ weekTime ]
  } else {
    // if the key already exists in grouped, just push new item to that key
    grouped[key].push(weekTime)
  }
}

// if you don't need the keys
Object.values(grouped)

Или используйте lodash groupby:

const _ = require('lodash')

_.groupBy(weekTimes, x => x.projectId + '/' + x.taskId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...