const closeRate = (data) => { const closed = aggregate(data.closed.map(item => ({ created_at: new Date(item.created_at).setHours(0, 0, 0, 0) })), 'created_at'); const open = aggregate(data.open.map(item => ({ created_at: new Date(item.created_at).setHours(0, 0, 0, 0) })), 'created_at'); const rate = Object.keys(closed).map(key => { const closedKey = closed[key] || 0; const openKey = open[key] || 0; const closeRate = closedKey / (closedKey + openKey); return { created_at: key, close_rate: closeRate }; }); return { lowest: rate.reduce((acc, curr) => acc.close_rate < curr.close_rate ? acc : curr, []), highest: rate.reduce((acc, curr) => acc.close_rate > curr.close_rate ? acc : curr, []), average: data.closed.length / (data.open.length + data.closed.length) || 0 }; }