function permute(permutation) { const length = permutation.length; const result = [permutation.slice()]; const c = new Array(length).fill(0); let i = 1; let k; while (i < length) { if (c[i] < i) { k = i % 2 && c[i]; let p = permutation[i]; permutation[i] = permutation[k]; permutation[k] = p; c[i] += 1; i = 1; result.push(permutation.slice()); } else { c[i] = 0; i += 1; } } return result; }