function calculateCycleTimeChartData(stories, dateRange) { var data = 'Data.CycleTimeChart = [\n'; var cycleTimes = []; _.each(dateRange, function (day) { _.each(stories, function (story) { if (story.completed_at.split('T')[0] === day) { var cycleTime = (new Date(story.completed_at).getTime() - new Date(story.started_at).getTime()) / MILLISECONDS_IN_A_DAY; cycleTimes.push(cycleTime); } }); if (day.split('-')[2] === '01') { data += ' [new Date("' + day + '"), ' + _.max(cycleTimes) + ', ' + _.mean(cycleTimes) + ', ' + _.min(cycleTimes) + '],\n'; cycleTimes = []; } }); data += '];\n'; return data; }
calcProbableValue(values) { let itemIndex while (values.length > 2) { const avg = _.mean(values) const min = _.min(values) const max = _.max(values) if ((min + max) / 2 === avg) { return avg } let maxDeviation = 0 _.forEach(values, (value, i) => { const deviation = Math.abs(value - avg) if (deviation > maxDeviation) { maxDeviation = deviation itemIndex = i } }) values.splice(itemIndex, 1) } return parseInt(_.mean(values)) }