jkh*_*man 4 javascript arrays recursion
假设我有这个数组:
\nconst input = [\xe2\x80\x9ca\xe2\x80\x9d, \xe2\x80\x9cb\xe2\x80\x9d, \xe2\x80\x9cc\xe2\x80\x9d, \xe2\x80\x9cd\xe2\x80\x9d];\nRun Code Online (Sandbox Code Playgroud)\n我想创建这个输出:
\n[\n [\xe2\x80\x9ca\xe2\x80\x9d],\n [\xe2\x80\x9ca\xe2\x80\x9d, \xe2\x80\x9cb\xe2\x80\x9d],\n [\xe2\x80\x9ca\xe2\x80\x9d, \xe2\x80\x9cc\xe2\x80\x9d],\n [\xe2\x80\x9ca\xe2\x80\x9d, \xe2\x80\x9cd\xe2\x80\x9d],\n [\xe2\x80\x9ca\xe2\x80\x9d, \xe2\x80\x9cb\xe2\x80\x9d, \xe2\x80\x9cc\xe2\x80\x9d],\n [\xe2\x80\x9ca\xe2\x80\x9d, \xe2\x80\x9cb\xe2\x80\x9d, \xe2\x80\x9cd\xe2\x80\x9d],\n [\xe2\x80\x9ca\xe2\x80\x9d, \xe2\x80\x9cc\xe2\x80\x9d, \xe2\x80\x9cd\xe2\x80\x9d],\n [\xe2\x80\x9ca\xe2\x80\x9d, \xe2\x80\x9cb\xe2\x80\x9d, \xe2\x80\x9cc\xe2\x80\x9d, \xe2\x80\x9cd\xe2\x80\x9d],\n [\xe2\x80\x9cb\xe2\x80\x9d],\n [\xe2\x80\x9cb\xe2\x80\x9d, \xe2\x80\x9cc\xe2\x80\x9d],\n [\xe2\x80\x9cb\xe2\x80\x9d, \xe2\x80\x9cd\xe2\x80\x9d],\n [\xe2\x80\x9cb\xe2\x80\x9d, \xe2\x80\x9cc\xe2\x80\x9d, \xe2\x80\x9cd\xe2\x80\x9d],\n [\xe2\x80\x9cc\xe2\x80\x9d],\n [\xe2\x80\x9cc\xe2\x80\x9d, \xe2\x80\x9cd\xe2\x80\x9d],\n [\xe2\x80\x9cd\xe2\x80\x9d]\n]\nRun Code Online (Sandbox Code Playgroud)\n我不关心组合的顺序或长度,只需要所有各种方法来唯一地组合数组中的项目。
\n在 JavaScript 中执行此操作的最佳方法是什么?我怀疑 \xe2\x80\x99s 是一个漂亮的递归解决方案,但迭代也可以。
\n另外,正确的技术术语是什么?
\n正确的技术术语是幂集。这是规范的递归形式:
const f = (A, i=0) => i == A.length ? [[]] : f(A, i+1).flatMap(x => [x, [A[i]].concat(x)]);
console.log(JSON.stringify(f(['a', 'b', 'c', 'd'])));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1452 次 |
| 最近记录: |