У нас есть массив объектов, и нам нужно сгруппировать эти объекты по идентификатору группы.
Затем нам нужно получить массив массивов с отсортированными группами по отметке времени.
Этоначальная коллекция:
const arr = [
{id: 'id1', group: '123', timestamp: 222},
{id: 'id2', group: '123', timestamp: 999 },
{id: 'id3', group: '456', timestamp: 333 },
{id: 'id4', group: '789', timestamp: 111 },
{id: 'id5', group: '554', timestamp: 555 },
];
Результат, который мы пытаемся получить:
result = [
[
{id: 'id4', group: '789', timestamp: 111 },
],
[
{id: 'id1', group: '123', timestamp: 222},
{id: 'id2', group: '123', timestamp: 999 },
],
[
{id: 'id3', group: '456', timestamp: 333 },
],
[
{id: 'id5', group: '554', timestamp: 555 },
]
]
Мы достигли этого с помощью Underscore.js, но мы ищем решение с использованием собственного javascript, и мы изо всех сил пыталисьперейти от сокращенного объекта к массиву массива.
var groups = _(arr).chain()
.groupBy("group")
.sortBy((data) => _.first(data).timestamp)
.value();
https://jsfiddle.net/tdsow1ph/
Мы попытались сначала сгруппировать элементы, используя такой метод:
const groupBy = (arr, propertyToGroupBy) => {
return arr.reduce((groups, item) => {
const val = item[propertyToGroupBy];
groups[val] = groups[val] || [];
groups[val].push(item);
return groups;
}, {});
}
Но мы получаем несортируемый объект.Поэтому нам нужно преобразовать это в массив массива, но мы изо всех сил пытаемся это сделать, а затем применяем сортировку по значению временной метки.