Reputation: 262
I wrote a function which returns mean and variance of the given list using only reduce().
var list = [1, 2, 3, 4];
var math = getMeanAndVar(list);
function getMeanAndVar(list) {
var res = list.reduce(function(lis, cur, ind, arr) {
var meanTot = arr.reduce(function(pre, cur) {
return pre + cur;
})
var total = getVariance(arr, tot / arr.length);
return {
mean: meanTot / arr.length,
variance: total / arr.length
}
function getVariance(list, mean) {
return list.reduce(function(pre, cur) {
pre = pre + Math.pow((cur - mean), 2);
return pre;
}, 0)
}
})
return ["Mean:",
res.mean,
"Variance:",
res.variance
].join(' ');
}
console.log(math);
Is there any other way to optimize the code?
Upvotes: 1
Views: 1997
Reputation: 74655
Get rid of the outer reduce
. It is useless. consider this:
function getMeanAndVar(arr) {
function getVariance(arr, mean) {
return arr.reduce(function(pre, cur) {
pre = pre + Math.pow((cur - mean), 2);
return pre;
}, 0)
}
var meanTot = arr.reduce(function(pre, cur) {
return pre + cur;
})
var total = getVariance(arr, meanTot / arr.length);
var res = {
mean: meanTot / arr.length,
variance: total / arr.length
}
return ["Mean:",
res.mean,
"Variance:",
res.variance
].join(' ');
}
var arr = [1, 2, 3, 4];
var math = getMeanAndVar(arr);
console.log(math);'
Prints:
Mean: 2.5 Variance: 1.25
Upvotes: 3