GB
const src = [1, 2, 3]
const res = []
let steps = 1 << src.length
const shift = Math.ceil(steps / 2)
while (steps) {
steps--
res.push(
src.map((v, i) => ((shift >> i) & steps) ? v : 0)
)
}
пс. да, там лимиты инта набегут, но думаю 40 уровней вложенности за глаза, десять может ещё быть 40, это уже прям нужно долбануться