all array combinations
finds all the possible combinations of the elements in an array.
by enagu
HTML
<div id="blockA">Output goes here</div>
CSS
body {
font-family: Verdana, Geneva, sans-serif;
font-size: 12px;
}
JavaScript
function combinationsWithLimit (Asource, limit){
limit = limit || 0;
var combos = [];
var temp = [];
var picker = function (arr, holder, collect) {
if (holder.length) {
collect.push(holder);
}
for (var i=0; i<arr.length; i++) {
var arrcopy = arr.slice(0, arr.length);
var elem = arrcopy.splice(i, 1);
if (arrcopy.length > 0) {
picker(arrcopy, holder.concat(elem), collect);
} else {
collect.push(holder.concat(elem));
}
}
}
picker(Asource, temp, combos);
// Apply the limiter (otherwise, just return "combos");
if(limit < 1){
return combos;
}
// Weed out the items < limit defined
var Aout = [];
for (var i=0; i<combos.length; i++) {
var item = combos[i];
if(item.length <= limit){
Aout.push(item);
}
}
return Aout;
}
var todo = ["no", "on", "sa", "si", "in", "ni", "opa"];
var combos = combinationsWithLimit(todo, 3);
var out = "Total Combinations: " + combos.length + "<br />";
for(i=0; i<combos.length;i++){
out += combos[i].join("") + "<br>";
}
var blockA = document.getElementById("blockA");
blockA.innerHTML = out;