Get all subsets of an array
Build the power set, smallest subsets first.
function getSubsets(values) { return values.reduce((subsets, value) => subsets.concat(subsets.map(subset => [...subset, value])), [[]]); }
Input & expected output
Input
[
"a",
"b",
"c"
]Expected output
[
[],
[
"a"
],
[
"b"
],
[
"a",
"b"
],
[
"c"
],
[
"a",
"c"
],
[
"b",
"c"
],
[
"a",
"b",
"c"
]
]The edge case
Input
[]Expected output
[
[]
]Know the limits
- The result has 2^n subsets, so the lab accepts at most 10 values (1,024 subsets).
The function above is the implementation used by the lab. The lab validates JSON types and caps size before execution; include equivalent validation when accepting untrusted input in your application.
Source & maintenance
Based on Get all subsets of an array from the original 1loc collection by Nguyen Huu Phuoc. Copyright (c) 2020 phuoc-ng. MIT licensed.
Caps input at 10 values before building 2^n subsets. Original MDX retained as inert source evidence.
Maintained by Oveyon. Source commit: 14b481cf60df. Read the license.
Keep exploring
- Clone an array — Create a new array without copying the objects inside it.
- Remove duplicate values — Keep the first occurrence of each value, in its original order.
- Flatten a nested array — Turn a nested array into one sequence of values.