# How to find all subsets of a set in JavaScript?

Here is one more very elegant solution with no loops or recursion, only using the map and reduce array native functions.

```
const getAllSubsets =
theArray => theArray.reduce(
(subsets, value) => subsets.concat(
subsets.map(set => [value,...set])
),
[[]]
);
console.log(getAllSubsets([1,2,3]));
```

We can solve this problem for a subset of the input array, starting from `offset`

. Then we recurse back to get a complete solution.

Using a generator function allows us to iterate through subsets with constant memory usage:

```
// Generate all array subsets:
function* subsets(array, offset = 0) {
while (offset < array.length) {
let first = array[offset++];
for (let subset of subsets(array, offset)) {
subset.push(first);
yield subset;
}
}
yield [];
}
// Example:
for (let subset of subsets([1, 2, 3])) {
console.log(subset);
}
```

Runtime complexity is proportional to the number of solutions (2ⁿ) times the average length per solution (n/2) = **O(n2ⁿ)**.

Another simple solution.

```
function getCombinations(array) {
function fork(i, t) {
if (i === array.length) {
result.push(t);
return;
}
fork(i + 1, t.concat([array[i]]));
fork(i + 1, t);
}
var result = [];
fork(0, []);
return result;
}
var data = [1, 2, 3],
result = getCombinations(data);
console.log(result);
```

`.as-console-wrapper { max-height: 100% !important; top: 0; }`