我有一个类似的声音列表:
[
[ 'b', 'v' ],
[ 'a' ],
[ 'n', 't' ]
]
我需要列出声音可以产生的所有组合的列表。所需的输出是:
[
'ban',
'van',
'bat',
'vat'
]
到目前为止,我能提出的最好的解决方案是硬编码解决方案,但是该解决方案必须灵活以适应任何长度的数组。有任何想法吗?
答案 0 :(得分:1)
您可以递归遍历组合并通过生成器产生结果:
function* combine([head, ...tail], previous = []) {
for(const v of head) {
if(tail.length) {
yield* combine(tail, [...previous, v]);
} else yield [...previous, v];
}
}
// Then just do
console.log(
[...combine(["bv", "a", "nt"])].map(it => it.join(""))
);