/*jslint sloppy:true, white:true, vars:true, plusplus:true */ var permutation = function (collection){ var current, subarray, result = [], currentArray = [], newResultArray = []; if (collection.length){ current = collection.shift(); result = permutation(collection); currentArray.push(current); result.map(function(list) { newResultArray.push(list.slice(0)); list.push(current); }); result.push(currentArray); result = result.concat(newResultArray); } return result; }; console.log(permutation(['a','b','c','d']) .join('\n'));