Skip to content

Instantly share code, notes, and snippets.

@radmen
Created January 24, 2019 09:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save radmen/1954f970ae0e106320144b28e4693511 to your computer and use it in GitHub Desktop.
Save radmen/1954f970ae0e106320144b28e4693511 to your computer and use it in GitHub Desktop.
const deepEql = require('deep-eql')
const input = require('./input.json')
const output = require('./output.json')
const groupByDate = (messages) => messages.reduce(
(carry, message) => {
const copy = Array.from(carry)
const tail = copy.pop();
const groupDate = new Date(message.created_at).getDate();
return tail && tail[0].groupDate === groupDate
? copy.concat([tail.concat({ groupDate, ...message })])
: carry.concat([[{ groupDate, ...message }]])
},
[]
);
const groupByUser = (messages) => messages.reduce(
(carry, message) => {
const copy = Array.from(carry)
const tail = copy.pop()
const { groupDate, ...rest } = message
if (!tail || tail.user.id !== rest.user.id) {
return carry.concat({ ...rest, children: [rest] })
}
return copy.concat({ ...tail, children: tail.children.concat(rest) })
},
[]
)
const combineMessages = (messages) => {
const byDate = groupByDate(messages)
return byDate.map(items => ({
date: items[0].created_at,
messages: groupByUser(items)
}))
}
const result = _combineMessages(input)
if (!deepEql(output, result)) {
console.log(JSON.stringify(result))
} else {
console.log('ok!')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment