Другой подход Рамды:
const {pipe, map, toPairs, unnest, groupBy, head, uniqBy, last, values, apply, objOf} = R
const uniqTimes = pipe(
map(toPairs), //=> [[['start', 1], ['end', 2]], [['start', 1], ['end', 3]], ...]
unnest, //=> [['start', 1], ['end', 2], ['start', 1], ['end', 3], ...]
groupBy(head), //=> {start: [['start', 1], ['start', 1], ['start', 4], ...], end: [['end', 2], ...]}
map(uniqBy(last)), //=> {start: [['start', 1], ['start', 4], ...], end: [['end', 2], ...]}
values, //=> [[['start', 1], ['start', 4], ...], [['end', 2], ...]]
unnest, //=> [['start', 1], ['start', 4], ..., ['end', 2], ...]
map(apply(objOf)) //=> [{"start": 1}, {"start": 4}, ..., {"end": 2}, ...]
)
const timestamps = [{"start_time":1540458000000,"end_time":1540472400000},{"start_time":1540458000000,"end_time":1540486800000},{"start_time":1540458000000,"end_time":1540501200000},{"start_time":1540472400000,"end_time":1540486800000},{"start_time":1540472400000,"end_time":1540501200000},{"start_time":1540486800000,"end_time":1540501200000}]
console.log(uniqTimes(timestamps))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
Вот как мне нравится использовать Ramda: создать конвейер функций, каждая из которых выполняет простые преобразования.
Обновление
В комментарии был задан вопрос о том, как сгенерировать вывод, похожий на
{
"start_time": [1540458000000, 1540458000000],
"end_time": [1540472400000, 1540486800000]
}
Это должно быть сделано для того же ввода:
const uniqTimes = pipe(
map(toPairs),
unnest,
groupBy(head),
map(map(last)),
map(uniq)
)