Get closest
http://stackoverflow.com/questions/15986800/get-the-closest-value-for-combinations-of-an-array-js#15986800
by laucheukhim
HTML
<table id="result"></table>
CSS
#result {
font-family: monospace;
}
td.test {
font-weight: bold;
text-align: right;
padding-right: 1em;
}
JavaScript
function getClosest(array, target) {
array = array.sort(function(a, b) { return a - b; });
var current = [], j = 0, least;
do {
j++;
sum = 0;
for(var i in current) { sum += current[i]; }
var results = [];
for (var i in array) {
var diff = Math.abs(sum + array[i] - target);
if (diff >= least) {
break;
}
results.push([array[i],diff]);
}
if (results.length) {
results.sort(function(a, b) {return a[0] - b[0]}).sort(function(a, b) {return a[1] - b[1]});
current.push(results[0][0]);
least = results[0][1];
}
} while (results.length);
var output = [];
for (var i in current) { output.push(current[i].toFixed(1)) };
return output.join("+");
}
var table = '';
var test = [1,2.5,4.8,7.3];
for (var i = 0; i<10; i+=0.1) {
table += '<tr><td class="test">'+i.toFixed(1)+"</td><td>"+getClosest([0.5, 1.0, 1.5, 2.0, 3.0], i)+"</td></tr>";
}
document.getElementById("result").innerHTML = table;