JSFiddle - React, Tailwind, and code Playground
HTML
<div id="res">
</div>
JavaScript
var arr=['a','b','c']
var res = allArrCombi(arr);
var resStr="";
for (var i=0;i<res.length;i++){
resStr+=" <BR> "+res[i].join();
}
document.getElementById("res").innerHTML=resStr;
function allArrCombi(arr){
var hash={};
var res=[];
arr.sort();
var len=Math.pow(2, arr.length);
for (var i=1;i<len;i++){
var lineRes=[];
for (var innerPos=0;innerPos < arr.length;innerPos++){
var mask = 1 << innerPos;
if (mask & i){
lineRes.push(arr[innerPos]);
}
}
do{
if (!hash[arr.join("-")]){ // did we have this combinatin already
res.push(lineRes.slice())
}
}while(nextPermutation(lineRes))
}
return res;
}
function nextPermutation(array) {
var i = array.length - 1;
while (i > 0 && array[i - 1] >= array[i])
i--;
if (i <= 0)
return false;
var j = array.length - 1;
while (array[j] <= array[i - 1])
j--;
var temp = array[i - 1];
array[i - 1] = array[j];
array[j] = temp;
j = array.length - 1;
while (i < j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
return true;
}