Combination: n Choose r

Algorithm for choosing n items out of r from a given collection of items.

by Ahmad Baktash Hayeri

JavaScript

var items = ['A', 'B', 'C', 'D'];

function chooseRofN (items, r){
	var chosen = [];
	if(r > items.length) return;
  if(r === 1 && items.length === 1) {
  	chosen.push(items);
    return chosen;
  }
    for(var n = 0; n < items.length; n++){
    	for(var t = 0; t < items.length-1; t++){
            var pivot = items[t];
            for(var i = t + 1; i < items.length - (r-2); i++){
            	pluck = [];
                pluck.push(pivot);
                for(var j = 0; j < r-1; j++){
                    pluck.push(items[i+j])
                }
                if(!hasEqualArray(chosen, pluck)){
                	chosen.push(pluck);
                }
            }
            var temp = items[t];
            items[t] = items[t+1];
            items[t+1] = temp;
        }
    }
    return chosen;
}

function hasEqualArray(collection, match){
	for(var i = 0; i < collection.length; i++){
    	if (collection[i].length !== match.length) continue;
		if(isEqual(collection[i], match)){
			return true;        
        }
    }
    return false;
}

function isEqual(arr1, arr2){
	arr1.sort(sortCallback);
    arr2.sort(sortCallback);
	for(var i = 0; i < arr1.length; i++){
    	if(arr1[i] !== arr2[i]){
        	return false
        }
    }
    return true;
}

function sortCallback(a, b){
    return a > b;
}

function print(arr){
	for(var i = 0; i < arr.length; i++){
    	console.log(arr[i]);
    }
}

var chosen = chooseRofN(items, 1);
print(chosen);