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;