如何获得一个单词的所有可能的声音组合

时间:2019-03-10 10:46:23

标签: javascript

我有一个类似的声音列表:

[ 
  [ 'b', 'v' ],
  [ 'a' ],
  [ 'n', 't' ]
]

我需要列出声音可以产生的所有组合的列表。所需的输出是:

[
  'ban',
  'van',
  'bat',
  'vat'
]

到目前为止,我能提出的最好的解决方案是硬编码解决方案,但是该解决方案必须灵活以适应任何长度的数组。有任何想法吗?

1 个答案:

答案 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(""))
);