I have been working through a few problems and challenges and am wondering if you would be willing to give me some feedback along with some assistance. The challenge was to write an array analyzer that outputs the average, median, number of negatives, and the number of odd values. I have a long version that I am trying to refactor and have ran into a pickle with finding the median. Here is the long version.
var Analyzer = {};
Analyzer.analyze = function(array){
var results = {};
var numbers = array.split(',').map(Number);
results.odds = Analyzer.odds(numbers);
results.negatives = Analyzer.negatives(numbers);
results.avg = Analyzer.avg(numbers);
results.median = Analyzer.median(numbers);
return results;
};
Analyzer.odds = function(e){
var odds = 0;
args.map(function(value){
if(value % 2 !== 0)
odds++;
});
return odds;
};
Analyzer.negatives = function(e){
var negatives = 0;
args.map(function(value){
if(value < 0)
negatives++;
});
return negatives;
};
Analyzer.avg = function(e){
var total = 0;
args.map(function(value){total+=value});
var avg = total/args.length;
return avg !== undefined ? parseFloat(avg.toFixed(2)) : 0;
};
Analyzer.median = function(e){
var sortable = args;
sortable.sort(function(a,b){return a-b;});
var middle = Math.floor(sortable.length/2);
return sortable.length % 2 ? sortable[middle] : (sortable[middle-1] + sortable[middle]) /2;
};
here is the short version
function arrayAnalyzer() {
var results = {
odds: 0,
negatives: 0,
avg: 0,
median: 0
}
for (var i = 0; i < arguments.length; i++) {
if (Math.abs(arguments[i]) % 2 === 1) results.odds++
if (arguments[i] < 0)
results.negatives++
results.avg += arguments[i] / arguments.length
results.median = (arguments.length - 1) / 2 #this is just me getting lucky with the output. It doesn't solve!
}
console.log(results);
}
arrayAnalyzer(7, -3, 0, 12, 44, -5, 3); #testcase